[SQL allgemein] Verstandnisfrage menu/menu_menu

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

  • [SQL allgemein] Verstandnisfrage menu/menu_menu

    Hallo...
    kleine Verstaendigfrage zu diesem Beitrag

    Aufbau meiner Tabellen:

    navi
    =============
    id_navi
    id_sub
    position
    level
    name

    navi2
    =============
    id_navi
    id_sub2

    'Umgebautes' Query, da ich die Userverwaltung nicht benoetige:

    PHP-Code:
    $query "    SELECT
                    m2.*
                FROM
                    navi m 
                LEFT JOIN navi2 mm ON ( m.id_navi = mm.id_sub2 ) 
                LEFT JOIN navi m2 ON ( mm.id_navi = m2.id_sub )
                LEFT JOIN navi2 mm2 ON    ( m2.id_navi = mm2.id_sub2 )
                WHERE
                    m.id_navi = 
    $site OR
                    m.id_sub = 
    $site
                GROUP BY
                    m2.id_navi,
                    m2.id_sub,
                    m2.level,
                    m2.position 
                ORDER BY
                    m2.id_sub,
                    m2.level,
                    m2.position;"

    Testdaten in der DB sind als Pic angehaengt...


    Mein Porblem bei diesem Query:
    Ab der Tiefe 1 wird der Baum fast richtig ausgelesen. Leider aber nur die Menupunkte, die ab der Tiefe in der Datenbank stehn. Alle anderen werden nicht aus der Datenbank ausgelesen.
    Bei Tiefe 0, dem root des Baums, wird nur eine leere Zeile von dem Query zurueckgegeben.
    Nach erweitern der Tablle navi2 um saemtliche Abhaenigkeiten wie 1,0 / 4,0 / 1,6 und 1,7 (id_navi,id_sub2) besteht immernoch das gleiche Problem.

    Das eigentliche Resultat soll einen kompletten Baum ausgeben, der je nach angeklicktem Menupunkt die Untermenus des Punktes anzeigt und bei Klick auf einen anderen Oberpunkt die Unterpunkte wieder zuklappt, die nicht zu diesem Oberpunkt gehoeren und die eigenen anzeigt.

    Liegts nun am Nichtverstaednis, wie die Daten in der DB gehoeren... oder am Query selbst? Derzeit vollkommen ratlos bin...


    bb D.
    Angehängte Dateien

  • #2
    wenn der screenshot deinen datenstand widerspiegelt, dann wundert mich nichts

    du hast:
    1 2
    1 3
    4 5
    1 6
    2 6
    2 7

    du brauchst:
    0 1
    0 2
    1 2
    0 3
    1 3
    0 4
    0 5
    4 5
    0 6
    1 6
    2 6
    0 7
    1 7
    2 7

    dir fehlt:
    0 1
    0 2
    0 3
    0 4
    0 5
    0 6

    mach das mal rein, probiere nochmal und poste einen dump der beiden tabellen wenn's nicht geht
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      hmm.. funktioniert fast bestens... bis auf den menupunkt 'sub2 von sub von test'...

      in navi2 steht nun:

      1 2
      1 3
      1 6
      2 6
      4 5
      2 7
      0 3
      0 1
      0 2
      0 4
      0 5
      0 6
      0 7

      lass ich 0 7 weg, verschwindet die navigation komplett, weil die rootpunkte nicht ausgelesen werden... setzt ich 0 7 wird der baum on klick auf link zugeklappt...
      fuer 'sub1 von sub von test' funktioniert es aber einwandfrei...

      tabelle navi iss unveraendert geblieben...


      bb D.

      Kommentar


      • #4
        Original geschrieben von mrhappiness
        poste einen dump der beiden tabellen wenn's nicht geht
        phpmyadmin -> die beiden tabellen exportieren (struktur und daten)

        kann ja auch sein, dass ich was vergessen hab
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          im anhang *smile*
          Angehängte Dateien

          Kommentar


          • #6
            1 7 fehlt
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              hmm... glaub habs verstanden...
              es muessen also immer alle abhaenigkeiten vom neuen menupunkt nach oben gewaehrleistet sein...
              bei einem menupunkt in ebene 4 hat mal also 4 abhaenigkeitseintraege...
              einmal von dem neuen menupunkt zu seinem ueberpunkt... dann vom neuen menupunkt zum ueberpunkt des ueberpunktes... bis man schliesslich bei root also null rauskommt...

              wenn die logik richtig ist grossen dank fuer Deine hilfe...

              bb D.


              [edit:] jaja... die rechtschreibfehler... *mit rotstift auf monitor anstreich*
              Zuletzt geändert von Diary; 30.11.2004, 10:00.

              Kommentar


              • #8
                richtig

                bitte
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Habe das selbe jetzt bei mir implementiert. Leider funktioniert das Navigationsmenü nicht so ganz. Beispiel hier: http://www.feuerwehr-maintal.de/neu/?site=5
                  Die Links "Bischofsheim" und "Dörnigheim" sollten eigentlich direkt unter "Feuerwachen" angezeigt werden. Dieser Link ist dort auch angeklickt. Allerdings wird das ganze falsch sortiert...
                  Woran kann das liegen?

                  Zweites Problem: Unten auf Sitemap klicken. Dort wird das ganze ziemlich komisch dargestellt. Ich habe den SQL Befehl insofern modifiziert, dass ich das entfernt habe:

                  Code:
                  WHERE
                                  m.id_navi = $site OR
                                  m.id_sub = $site
                  Hier unten meine Datenbankstruktur:

                  Code:
                  -- 
                  -- Tabellenstruktur für Tabelle `v2_menu`
                  -- 
                  
                  CREATE TABLE `v2_menu` (
                    `menu_id` smallint(6) NOT NULL auto_increment,
                    `parent_id` smallint(6) NOT NULL default '0',
                    `level` smallint(6) NOT NULL default '0',
                    `sort` smallint(6) NOT NULL default '0',
                    `bezeichnung` varchar(200) NOT NULL default '',
                    `page` smallint(6) NOT NULL default '0',
                    `data` smallint(6) NOT NULL default '0',
                    PRIMARY KEY  (`menu_id`)
                  ) TYPE=MyISAM AUTO_INCREMENT=14 ;
                  
                  -- 
                  -- Daten für Tabelle `v2_menu`
                  -- 
                  
                  INSERT INTO `v2_menu` (`menu_id`, `parent_id`, `level`, `sort`, `bezeichnung`, `page`, `data`) VALUES (1, 0, 0, 0, 'Wir über Uns', 0, 0),
                  (2, 1, 1, 1, 'Fahrzeuge', 3, 0),
                  (3, 1, 1, 2, 'Feuerwachen', 5, 0),
                  (4, 3, 2, 3, 'Dörnigheim', 0, 0),
                  (5, 3, 2, 5, 'Bischofsheim', 0, 0),
                  (6, 4, 3, 4, 'Rundgang', 0, 0),
                  (7, 0, 0, 2, 'Einsätze', 7, 0),
                  (8, 7, 1, 3, 'Einsatzstatistik', 0, 0),
                  (9, 0, 0, 3, 'Service', 0, 0),
                  (10, 9, 1, 0, 'Brandschutztipps', 0, 0),
                  (11, 1, 1, 6, 'Fachabteilungen', 11, 0),
                  (12, 11, 2, 7, 'Atemschutzwerkstatt', 12, 1),
                  (13, 0, 0, 0, 'Aktuell', 0, 0);
                  
                  -- 
                  -- Tabellenstruktur für Tabelle `v2_menu_menu`
                  -- 
                  
                  CREATE TABLE `v2_menu_menu` (
                    `menu_id` smallint(6) NOT NULL default '0',
                    `child_id` smallint(6) NOT NULL default '0'
                  ) TYPE=MyISAM;
                  
                  -- 
                  -- Daten für Tabelle `v2_menu_menu`
                  -- 
                  
                  INSERT INTO `v2_menu_menu` (`menu_id`, `child_id`) VALUES (1, 2),
                  (1, 3),
                  (3, 4),
                  (3, 5),
                  (0, 1),
                  (0, 3),
                  (0, 4),
                  (0, 5),
                  (0, 2),
                  (1, 4),
                  (1, 5),
                  (0, 6),
                  (3, 6),
                  (4, 6),
                  (0, 8),
                  (0, 7),
                  (7, 8),
                  (0, 10),
                  (0, 9),
                  (9, 10),
                  (0, 11),
                  (1, 11),
                  (0, 12),
                  (1, 12),
                  (11, 12),
                  (0, 13);
                  Ich hoffe ihr könnt mir helfen.

                  Gruß
                  Holger

                  Kommentar

                  Lädt...
                  X