steffen: Navi anzeigen lassen mit einer SQL Query

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

  1. 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