Navi anzeigen lassen mit einer SQL Query
steffen
- datenbank
Hallo,
habe derzeit eine Navigation gebaut mit einer Rekursion. Klappt auch wunderbar, aber nun habe ich von Nested Sets gelesen. Dort kann man mit einer Abfrage alle unterstrukturen rauslesen. Jedoch möchte ich in einer Baumstruktur nur einzelne unterordner und nur bis zu einer bestimten Tiefe auslesen lassen. Wenn ich nun zB folgende Struktur habe:
* Lebensmittel
o Getränke
o Gemüse
+ Broccoli
+ Kohlrabi
o Obst
+ Pfirsich
+ Orange
* Kleidung
o Herrenkleidung
o Damenkleidung
Möchte ich nur bis Getränke oder bis Broccoli auslesen lassen.
Ist das mit einer Abfrage möglich? SQL Tabelle wäre so aufgebaut:
ID name lft rgt
1 Lebensmittel 1 16
2 Gemüse 2 7
3 Obst 8 13
4 Broccoli 3 4
5 Kleidung 17 22
6 Kohlrabi 5 6
7 Pfirsich 9 10
8 Herrenkleidung 18 19
9 Damenbekleidung 20 21
10 Orange 11 12
11 Getränke 14 15
Hoffe die Formatierung wird richtig angezeigt.
Danke für eire hilfe.
steffen
Hallo,
Jedoch möchte ich in einer Baumstruktur nur einzelne unterordner und nur bis zu einer bestimten Tiefe auslesen lassen. Wenn ich nun zB folgende Struktur habe: ...
Ist das mit einer Abfrage möglich? SQL Tabelle wäre so aufgebaut:
Wenn dein Datenbanksystem (korrelierende) Unterabfragen (subqueries/subselects) unterstützt, ja.
Du solltest zuerst die "Tiefe" der einzelnen Nodes feststellen, dann kannst du darauf eine WHERE Einschränkung aufbauen. (z.b. SELECT * FROM Tree WHERE Depth < 2)
Die Tiefe der Nodes in einem Nested Set bekommst du, in dem du die Anzahl der eindeutigen Parent-Nodes herausfindest. Die Beziehung von Child zu Parent ist: Left und Right eines Child-Nodes liegen immer zwischen Left und Right eines Parent Nodes
Broccoli in deinem Beispiel hat 3 und 4. 3 und 4 liegen innerhalb von 2 und 7 und 1 und 16 aber nicht innerhalb 9 und 10 oder 8 und 13. Also hat Broccoli eine Tiefe (oder Level) von 2.
Das SQL Dazu kannst du sicherlich selbst zusammenbauen, n bisschen JOIN, GROUP BY, COUNT und BETWEEN ...
Ciao, Frank