Nested Sets und 2 Anwendungsfragen?

B

BartTheDevil89

Guest
Hallo,

ich nutze für ein Kategoriesystem Nested Sets. Soweit funktioniert auch alles. Jedoch habe ich nun 2 Fragen:

1. Pfad herausfinden:
Beispielsweise schaut meine Kategorieaufteilung so aus:

Haupt1
- Unter1
- Unter2
-- UnterUnter1
-- UnterUnter2
-- UnterUnter3
- Unter3
Haupt2
- Unter1
Haupt3
- Unter1
- Unter2

Aber wie kann ich jetzt einen Pfad herausfinden? Also beispielsweise der Pfad zu UnterUnter2 wäre ja folgendes:
Haupt1 -> Unter2 -> UnterUnter2

Aber wie finde ich diesen Pfad heraus?

2. Kategorie nur teilweise öffnen:

Haupt1
- Unter1
- Unter2
-- UnterUnter1
-- UnterUnter2
-- UnterUnter3
- Unter3
Haupt2
- Unter1
Haupt3
- Unter1
- Unter2

wäre jetzt wieder der Ausgangspunkt. Mit dieser Abfrage würde ich ja den Baum komplett ausgeben können:

CODE
$result2 = $db->query("SELECT group2.*,
COUNT(*) AS level
FROM menu_eintrag AS group1,
menu_eintrag AS group2
WHERE group2.lft BETWEEN group1.lft AND group1.rgt and group1.menu = $menu[id] and group2.menu = $menu[id]
GROUP BY group2.lft;");
while($menu_eintrag = mysql_fetch_array($result2)){

}



Aber wie schaffe ich es zum Beispiel, dass ich erst

Haupt1
Haupt2
Haupt3

habe. Bei einem Öffnen der Haupt1

kommt dann

Haupt1
- Unter1
- Unter2
- Unter3
Haupt2
Haupt3

und so weiter...also das immer nur Teile des Baumes offen sind.


Vielen Dank für die nette Hilfe...
 
Teilbäume in Nested Sets darstellen

Zu 1: Von Wurzel zu einem bestimmten Blatt

CODE
SELECT p. *
FROM menu_eintrag n, menu_eintrag p
WHERE n.lft
BETWEEN p.lft
AND p.rgt
AND n.menu = $menu[id]
ORDER BY n.lft




Zu 2: Struktur unterhalb eines Knotens


CODE
SELECT o.menu_name,
COUNT(p.menu)-1 AS level
FROM menu_eintrag AS n,
menu_eintrag AS p,
menu_eintrag AS o
WHERE o.lft BETWEEN p.lft AND p.rgt
AND o.lft BETWEEN n.lft AND n.rgt
AND n.id = (id von Haupt 1)
GROUP BY o.lft
ORDER BY o.lft;

 
Hi,

danke für die nette Hilfe. Aber irgendwie funktioniert die Sortierung der ersten Aufgabe nicht.

Also die Sortierung des Pfades passt nicht. Denn es kommt sowas beispielsweise bei raus:

Root -> Untereben 1 -> Hauptebene -> Untereben2

kommt zum Beispiel raus, obwohl ja eigentlich Hauptebene vor der Unterebene 1 sein müsste.

Danke für die nette Hilfe

Ganz vergessen: Die DB weist mit den lft und rgt-Daten keine Auffälligkeiten auf.
 
Zurück
Oben