Navigation aus drei Tabellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Navigation aus drei Tabellen

    Hallihallo!

    Den ganzen Tag rätsele ich schon an folgendem Problem und finde keinen Lösungsansatz der funktioniert:

    Ich möchte ein Navigationsmenu aus drei Tabellen erzeugen, die sich wie folgt zusammensetzen:

    Hauptkategorien (id, name)

    Menupunkte (id, hauptkatid,name,sid)

    Menuunterpunkte (id,menupunkteid,name, url)

    Die Hauptkategorien sind quasi die Rubrikenüberschriften, zu denen es mehrere Menupunkte gibt.
    Habe ich nun z.B. die Seite Produkte angeklickt (Variable $sid=produkte), soll das Menu die Menuunterpunkte zu diesem Thema mitauflisten, bei den anderen Menupunkten jedoch nicht.

    Hat jemand einen Lösungansatz?

    Vielen Dank!

    capsfan
    Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

  • #2
    Der Ansatz ist der
    left join
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      left outer join

      Ok, also mit left join.

      Ist es vom Ansatz einfacher die Hauptkategorien mit den den Menupunkten per join zu verknüpfen, da ich für die Menuunterpunkte ja noch einen zusätzlichen Vergleich benötige

      also etwa

      SELECT.... Hauptkategorien left join Menupunkte

      Schleife Bedingung Menuunterpunkte...

      echo Hauptkategorie,Menupunkt,Menuunterpunkt

      oder sollte ich das umgekehrt angehen

      Schleife Hauptkategorien

      SELECT... Menupunkte left join Menuunterpunkte WHERE....

      echo Hauptkategorie, Menupunkt,Menuunterpunkt ?

      (so langsam reift eine Idee dazu... )
      Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

      Kommentar


      • #4
        Ich würde es so machen:



        SELECT h.id as hid,h.name as hname, m1.name as m1name, m1.sid as m1sid,m2.name as m2name,m2.url as m2url FROM h LEFT JOIN m1 ON (h.id=m1.hid) LEFT JOIN m2 ON (m2.mid=m1.id AND m2.mid IN('ID AUS DER TABELLE M1'))

        Einfach mal den Dump und danach die Query in phpmyadmin reinschmeißen. Natürlich noch "'ID AUS DER TABELLE M1" durch z.B. 3 ersetzen und los gehts.

        Der dazugehörige Dump zum ausprobieren:
        Code:
        #
        # Tabellenstruktur für Tabelle `h`
        #
        
        CREATE TABLE h (
          id tinyint(2) default NULL auto_increment,
          name varchar(44) NOT NULL default '                                            ',
          PRIMARY KEY (id)
        ) TYPE=MyISAM;
        
        #
        # Daten für Tabelle `h`
        #
        
        INSERT INTO h VALUES (1, 'CounterStrike');
        INSERT INTO h VALUES (2, 'Rtcw');
        # --------------------------------------------------------
        
        #
        # Tabellenstruktur für Tabelle `m1`
        #
        
        CREATE TABLE m1 (
          id tinyint(2) default NULL auto_increment,
          hid tinyint(2) NOT NULL default '0',
          name varchar(55) NOT NULL default '                                                                                                              ',
          sid varchar(55) NOT NULL default '                                                       ',
          PRIMARY KEY (id)
        ) TYPE=MyISAM;
        
        #
        # Daten für Tabelle `m1`
        #
        
        INSERT INTO m1 VALUES (1, 1, 'Taktik', 'taktik');
        INSERT INTO m1 VALUES (2, 1, 'Waffen', 'waffen');
        INSERT INTO m1 VALUES (3, 1, 'skins', 'skins');
        INSERT INTO m1 VALUES (4, 2, 'Monster und Gegner', 'monster und gegner');
        # --------------------------------------------------------
        
        #
        # Tabellenstruktur für Tabelle `m2`
        #
        
        CREATE TABLE m2 (
          id tinyint(2) default NULL auto_increment,
          mid tinyint(2) NOT NULL default '0',
          name varchar(55) NOT NULL default '                                                                                                              ',
          url varchar(55) NOT NULL default '                                                       ',
          PRIMARY KEY (id)
        ) TYPE=MyISAM;
        
        #
        # Daten für Tabelle `m2`
        #
        
        INSERT INTO m2 VALUES (1, 3, 'Counter Terrorists', 'url zu cs');
        INSERT INTO m2 VALUES (2, 3, 'Terrors', 'url zu terrors');
        [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
        [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
        [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

        © Harald Schmidt

        Kommentar

        Lädt...
        X