MySQL + Baumstruktur
Verfasst: Freitag 4. Dezember 2009, 23:32
Hey.
Ich habe eine Frage bezüglich Baumstrukturen in Datenbanken. Dass es sich um MySQL handelt, spielt denke ich mal keine große Rolle.
Gegeben ist beispielweise folgende Datenstruktur (nur das wichtige):
Anders/grafisch dargestellt, nur noch mal zur Verdeutlichung:
Frage: Wenn ich jetzt 3 oder 4 als Knoten habe, aber auch alle übergeordneten Knoten (also 2, 1) haben will (zum Beispiel für eine Navigation), wie kriege ich die am besten/performantesten raus?
Ich könnte natürlich jetzt so oft eine SQL Abfrage an die Datenbank schicken, bis ich bei 0 (also der obersten Ebene) angekommen bin, aber das würde ja bedeuten, dass ich immer n Abfragen brauche, um alle übergeordneten Knoten rauszukriegen, wobei n die Ebene ist, auf der ich mich befinde.
Auf das Beispiel bezogen: Ich befinde mich auf Knoten 3, über die Parent ID krieg ich raus, dass darüber der Knoten 2 is. Und dann muss ich den Knoten 2 abfragen, um rauszufinden, dass er 1 untergeordnet ist und dann wiederum 1 abzufragen, um rauszufinden, dass dieser keinem Knoten untergeordnet ist (0).
Aber so eine rekursive Angehensweise ist glaube ich nicht so performant.
Ich habe eine Frage bezüglich Baumstrukturen in Datenbanken. Dass es sich um MySQL handelt, spielt denke ich mal keine große Rolle.
Gegeben ist beispielweise folgende Datenstruktur (nur das wichtige):
Code: Alles auswählen
id parent
--------------
1 0
2 1
3 2
4 2
5 1
6 0
Code: Alles auswählen
1 => 2 => 3
.. => 4
=> 5
6
Ich könnte natürlich jetzt so oft eine SQL Abfrage an die Datenbank schicken, bis ich bei 0 (also der obersten Ebene) angekommen bin, aber das würde ja bedeuten, dass ich immer n Abfragen brauche, um alle übergeordneten Knoten rauszukriegen, wobei n die Ebene ist, auf der ich mich befinde.
Auf das Beispiel bezogen: Ich befinde mich auf Knoten 3, über die Parent ID krieg ich raus, dass darüber der Knoten 2 is. Und dann muss ich den Knoten 2 abfragen, um rauszufinden, dass er 1 untergeordnet ist und dann wiederum 1 abzufragen, um rauszufinden, dass dieser keinem Knoten untergeordnet ist (0).
Aber so eine rekursive Angehensweise ist glaube ich nicht so performant.