dynamisches Treemenu mit Nested Sets

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

  • dynamisches Treemenu mit Nested Sets

    Hallo,

    das Problem "Nested Sets" wurde hier zwar schon ein paarmal diskutiert, aber leider habe ich für mein Problem noch keine Losung gefunden.

    Tabellenstruktur "tbl_menu"
    Code:
    node_id	menu		lft	rgt
    ---------------------------------------------
    1	Shop		1	24
    2	Alkoholika	2	19
    3	Alkoholfrei	20	23
    4	Biere		3	8
    5	Schnaps		9	18
    6	hochprozentig	10	15
    7	LowProzent	16	17
    8	Grasovska	11	12
    9	Korn		13	14
    10	Landskron	4	5
    11	Radeberger	6	7
    12	O-Saft		21	22
    -----------------------------------------------------------
    -----------------------------------------------------------
    Ausgabe des gesamten Baumes über die Query
    Code:
    "SELECT node1.node_id,node1.lft,node1.rgt,node1.beschreibung,COUNT(*) AS level
    	FROM tbl_menu AS node1,tbl_menu AS node2
    		WHERE node1.lft BETWEEN node2.lft AND node2.rgt GROUP BY node1.LFT"
    
    nodeID	lft	rgt	level	menupunkt
    -----------------------------------------------------------
    1	1	24	1	Shop
    2	2	19	2	|---Alkoholika
    4	3	8	3	|---|---Biere
    10	4	5	4	|---|---|---Landskron
    11	6	7	4	|---|---|---Radeberger
    5	9	18	3	|---|---Schnaps
    6	10	15	4	|---|---|---hochprozentig
    8	11	12	5	|---|---|---|---Grasovska
    9	13	14	5	|---|---|---|---Korn
    7	16	17	4	|---|---|---LowProzent
    3	20	23	2	|---Alkoholfrei
    12	21	22	3	|---|---O-Saft
    -----------------------------------------------------------
    -----------------------------------------------------------

    Die Ausgabe, die ich erreichen will:
    Beispiel:
    Bei Klick auf Schnaps soll das nächste Level unter Schnaps ausgegeben werden.
    Außerdem soll man alle "Brüder" [Biere] und den "Vater" [Alkoholika] von Schnaps, sowie die "Brüder
    des Vaters" [Alkoholfrei] angezeigt bekommen.
    Code:
    nodeID	lft	rgt	level	menupunkt                  
    -----------------------------------------------------------
    1	1	24	1	Shop                       
    2	2	19	2	|---Alkoholika             
    4	3	8	3	|---|---Biere              
    5	9	18	3	|---|---Schnaps            
    6	10	15	4	|---|---|---hochprozentig  
    7	16	17	4	|---|---|---LowProzent     
    3	20	23	2	|---Alkoholfrei            
    -----------------------------------------------------------
    -----------------------------------------------------------
    Habe schon einiges probiert, komme aber nie auf das gewünschte Ergebnis!
    ...wäre schön, wenn mir jemand weiterhelfen könnte.

    Ich hoffe das Beispiel ist anschaulich genug!


    Ciao, KaiCrow

  • #2
    hast du mal in unsere Tutorials geschaut?

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

    Kommentar


    • #3
      Hi,
      schau mal hier rein
      http://www.php-resource.de/tutorials/read/21/1/
      mfg
      Günni


      Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
      Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
      Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
      City-Tiger - Online durch die Straßen tigern...

      Kommentar


      • #4
        ja...das Tutorial hat mir auch geholfen, den gesamten Baum auszlesen. Allerdings brauche ich ja nur einen bestimmten Teil.

        Kommentar


        • #5
          Ich habe nochmal ein bißchen gegrübelt und bin auf keine schlüssige Abfrage gekommen, die das exakte Ergebnis bringt, was ich will.

          Es lassen sich jedoch 3 einzelne Anfragen an die Datenbank formulieren, die zusammengenommen die Ausgabe produzieren, die ich haben will.
          Am besten wäre es jetzt, wenn man diese Abfragen in einer zusammenfassen könnte...ich denke mal, JOIN wäre dafür zuständig, ich weiß aber nicht genau, wie ich das anstellen soll.

          Weiß jemand, wie das funktionieren könnte.
          Oder...kann man die einzelnen Abfrageergebnisse "im Nachhinein" noch zusammenführen?

          Hier meine Queries:
          Code:
          //Gesamte Hauptebene "Shop"
              $query3="SELECT node1.node_id,node1.lft,node1.rgt,node1.beschreibung,COUNT(*) AS level FROM tbl_menu AS node1, tbl_menu AS node2
           		    WHERE 
          		    node1.lft BETWEEN node2.lft AND node2.rgt 
          		    AND
          		    (node1.lft BETWEEN 18 AND 24)
          		    GROUP BY node1.LFT HAVING level=2";
          		    
          //Brüder & jeweiligen Väter zur Ebene "Schnaps"
              $query2="SELECT node1.node_id,node1.lft,node1.rgt,node1.beschreibung,COUNT(*) AS level FROM tbl_menu AS node1, tbl_menu AS node2
           
          		    WHERE 
          		    node1.lft BETWEEN node2.lft AND node2.rgt 
          		    AND
          		    (node1.lft BETWEEN 1 AND 9)
          		    GROUP BY node1.LFT HAVING level<=3";
          
          //Söhne von "Schnaps"
              $query1="SELECT node1.node_id,node1.lft,node1.rgt,node1.beschreibung,COUNT(*) AS level FROM tbl_menu AS node1, tbl_menu AS node2
           
          		    WHERE 
          		    node1.lft BETWEEN node2.lft AND node2.rgt 
          		    AND
          		    (node1.lft BETWEEN 9 AND 18)
          		    GROUP BY node1.LFT HAVING level=4";

          ...oder...gehe ich das ganze Problem zu kompliziert an und es gibt womöglich doch noch eine einfachere Lösung für mein Problem?

          Ciao

          Kommentar

          Lädt...
          X