SQL-Stammbaum

ZodiacXP

Erfahrenes Mitglied
Hallo, ich habe eine SQL Tabelle die nahezu einem Stammbaum gleicht:

Kopf:
ID; Parent; bezeichnung

Daten:
1; 0; foo
2; 1; fooba
3; 1; foobaba
4; 0; fofo
5; 2; fofofoo
6; 3; fubak

Jetz suche ich ein SQL-Query mit dem man nur die Zeilen ausgeben kann die dem Parent entsprechen. z.B. ich nehme ID=5 und möchte ausgegeben haben:

1; 0; foo
2; 1; fooba
5; 2; fofofoo

Parent bezeichnet also immer den "Eltern-Knoten" und so soll der Stammbaum ausgegeben werden.

Welche abfrage ist dazu geeignet?
 
Danke. Das ist klar.
Nur das sind mehrere SQL-Abfragen auf einmal und ich würde das gerne in so wenigen wie möglich machen.
 
Bei deinem derzeitigen Modell ist es nicht anders realisierbar – es sei denn du fragst alle Datensätze ab und filterst anschließend unpassende heraus. Das „Modified Preorder Tree“-Modell hingegen ist zwar in der Verwaltung etwas umfangreicher, dort genügt jedoch eine einzige Abfrage um Beschriebenes zu realisieren.
 
Wenn Du weißt, in welcher "Generation" Du Dich befindest oder nur eine bestimmte Anzahl Generationen nach oben wandern willst, könntest Du es mit einem Query und entsprechend vielen Joins lösen. Ist die Generation bzw. Tiefe der Ebene unbekannt, gibt es, wie Gumbo bereits geschrieben hat, keine Möglichkeit bei der Datenstruktur, sondern nur die rekursive Vorgehensweise mit entsprechend vielen Queries (natürlich kann man rekursive Lösungen auch iterativ darstellen, aber um mehrere Queries kommst Du nicht herum).

Wenn auf Deiner Datenstruktur überwiegend ebenenübergreifende Abfragen laufen und im Verhältnis wenig geändert wird, würde ich Dir zum MPTT raten.

Gruß hpvw
 
Zurück