nestedset, Menü aus Datenbank in HTML ausgeben
Franziska
- php
0 dedlfix
Sorry das ich mit etwas komme was schon xmal behandelt wurde, aber ich komme obwohl ich mir alles durchgelesen habe nicht weiter. Ich hoffe hier kann mir jemand helfen, weil ich kapier nichts mehr.
Ich habe auf Grundlage von "nestedset" ein Menü erstellt
id ! name ! links ! rechts
-----------------------------------------------
1 ! Lebensmittel ! 1 ! 14
2 ! Gemüse ! 2 ! 11
4 ! Broccoli ! 3 ! 10
7 ! Gelbkohl ! 5 ! 4
6 ! Rotkohl ! 7 ! 6
5 ! Grünkohl ! 9 ! 8
3 ! Obst ! 12 ! 13
8 ! Auto ! 15 ! 20
10! Opel ! 16 ! 17
9 ! Mercedes ! 18 ! 19
. Nun möchte ich diesen in ausgeben, aber mit allen Vorläufern, so etwa:
Lebensmittel
Lebensmittel - Gemüse
Lebensmittel - Gemüse - Broccoli
Lebensmittel - Gemüse - Gelbkohl
Lebensmittel - Gemüse - Rotkohl
Lebensmittel - Obst
Auto
Auto - Opel
Auto - Opel
Bis jetzt habe ich das:
SELECT s.id, s.Name, count( * ) AS
LEVEL , (
s.rgt - s.lft -1
) /2 AS Kinder, s.lft, s.rgt
FROM NestedSet v, NestedSet s
WHERE s.lft
BETWEEN v.lft
AND v.rgt
GROUP BY s.lft
bei folgender Ausgabe:
id Name LEVEL Kinder lft rgt
1 Lebensmittel 1 9.0000 1 14
2 Gemüse 2 2.0000 2 11
5 Broccoli 3 1.0000 3 10
9 Gelbkol 4 0.0000 5 4
weiter würde ich so vorgehen, aber so bekomme ich nur das Ende der jeweiligen Liste:
$result = mysql_query($sql) or die ($sql.'<br>'.mysql_error());
while ($ausgabe = mysql_fetch_object($result))
{
echo $ausgabe->Name.'<br>';
}
Franzi
Hi!
id ! name ! links ! rechts
1 ! Lebensmittel ! 1 ! 14
2 ! Gemüse ! 2 ! 11
4 ! Broccoli ! 3 ! 10
7 ! Gelbkohl ! 5 ! 4
6 ! Rotkohl ! 7 ! 6
5 ! Grünkohl ! 9 ! 8
3 ! Obst ! 12 ! 13
8 ! Auto ! 15 ! 20
10! Opel ! 16 ! 17
9 ! Mercedes ! 18 ! 19
Sieht falsch aus. Links ist bei Nested Sets immer kleiner als rechts. Zudem ist der Ampelkohl wohl eher kein Broccoli.
Nun möchte ich diesen in ausgeben, aber mit allen Vorläufern, so etwa:
Lebensmittel - Gemüse - Broccoli
Mit Nested Sets lassen sich mit einer Anfrage für _einzelne_ Elemente alle Vorfahren ermitteln. Um für _alle_ Elemente alle Vorfahren zu ermitteln, musst du für alle Elemente einzeln die Vorfahren-Query stellen oder im abfragenden Programm einmalig alle interessierenden Elemente abfragen, daraus einen Baum bilden und den dann rekursiv durchlaufen.
Mit SQL-Mitteln allein fällt mir nur die Erstellung einer Stored Function ein.
Lo!