rekursive DB-Abfrage - wie?
Kalle_B
- programmiertechnik
Hallöle,
es gibt Organisationen, die mehrere Ebenen haben, z.B.
Wenn nun ein Chor eine Veranstaltung eingibt, soll die bei allen übergeordneten Ebenen auch zu sehen sein. Das heisst, wenn ich ich Termine für den Chorverband anzeige, sollen alle Termine der untergeordneten Ebenen enthalten sein.
Ich suche eine DB-Abfrage für n Ebenen.
Ich kann eine DB-Tabelle anlegen in der Form
Dann kann ich aus der Sicht einer Ebene die "Enkel" so finden:
SELECT
gru1.*
,gru2.*
FROM gruppentabelle gru1
LEFT JOIN gruppentabelle gru2
ON gru2.id = gru1.sohn_id
LEFT JOIN gruppentabelle gru3
ON gru3.id = gru2.sohn_id
WHERE gru1.id = bund_id
The LEFT JOIN gestattet nun drei Ebenen zu finden. Aber was wäre mit sechs Ebenen? Gibt es bei Datenbankabfragen Rekursion?
Lieben Gruß, Kalle
Hi!
Aber was wäre mit sechs Ebenen? Gibt es bei Datenbankabfragen Rekursion?
Rekursive Abfragen sollte man vermeiden. Es gibt Nested Sets.
Lo!
Hallo, dedlfix,
habe mal eben in nested sets reingelesen. Interessanter Ansatz.
Aber: Pro Baum (hier: Säugetiere) wird eine eigene Tabelle gebraucht, richtig?
Wenn nun "Känguruh" nicht nür als Säugetier gesehen wird, sondern auch als Bestand im Zoo Heidelberg, der wiederum zu den Zoos in Baden gehört ...
Die Tabelle in dem Beispiel heißt bezeichnenderweise "tree", ist das wörtlich gemeint?
Kalle
Hi!
Aber: Pro Baum (hier: Säugetiere) wird eine eigene Tabelle gebraucht, richtig?
Nein, nicht zwingend. Man kann ein weiteres Feld einfügen, das den jeweiligen Baum angibt. Du hast dann sozusagen einen Wald pro Tabelle.
Wenn nun "Känguruh" nicht nür als Säugetier gesehen wird, sondern auch als Bestand im Zoo Heidelberg, der wiederum zu den Zoos in Baden gehört ...
Dann hast du ein Problem, weil du hier zwei Ordnungssysteme ineinanderzubringen gedenkst, die nicht ineinander gehören.
Lo!
Hi!
Wenn nun "Känguruh" nicht nür als Säugetier gesehen wird, sondern auch als Bestand im Zoo Heidelberg, der wiederum zu den Zoos in Baden gehört ...
Dann hast du ein Problem, weil du hier zwei Ordnungssysteme ineinanderzubringen gedenkst, die nicht ineinander gehören.
Dann ist nestet sets nichts für mich. Ein Chor (oder eine andere Organisation) kann sehr wohl Mitglied bei mehreren "Elternelementen" sein.
Kalle
Dann ist nestet sets nichts für mich. Ein Chor (oder eine andere Organisation) kann sehr wohl Mitglied bei mehreren "Elternelementen" sein.
Meine Problemstellung ist ähnlich einem Stammbaum, jede Person kann zwei oder mehrere (Pflege-) Eltern haben, mehrere Geschwister, mehrere Kinder.
Wie bildet man sowas in einer DB-Tabelle ab?
Kalle
Hello,
Wie bildet man sowas in einer DB-Tabelle ab?
dedlfix hat eingangs gesagt man möge Rekursionen vermeiden - das heißt nicht, dass sie technisch nicht möglich wären.
MfG
Rouven
Hi!
Wie bildet man sowas in einer DB-Tabelle ab?
dedlfix hat eingangs gesagt man möge Rekursionen vermeiden - das heißt nicht, dass sie technisch nicht möglich wären.
Rekursionen sind doch aber wohl nicht die Antwort auf die Abbildungsfrage sondern eher ein möglicher Teil einer Lösung, die ein wie auch immer geartetes Gebilde abfragt.
Mit Nested Sets kommt man nicht weiter, wenn ein Objekt an mehreren Stellen eingehängt werden soll. Und da es eine m:n-Beziehung werden soll, kommt man wohl auch nicht mit nur einer Tabelle aus. Ob nun aber Genealogie das richtig Stichwort sein soll, wenn es um Veranstalter und deren Mitgliedschaften gehen soll, ... das kommt mir doch sehr apfelbirnig vor.
Lo!
Hi!
Dann ist nestet sets nichts für mich. Ein Chor (oder eine andere Organisation) kann sehr wohl Mitglied bei mehreren "Elternelementen" sein.
Das Gebilde oberhalb des Chor/Ensembles/Künstlers - ist das in seiner Struktur eindeutig ein Baum oder bestehen da auch wieder Querverbindungen und Mehrfachaufhängungen an Elternelementen? Sonst könntest du dieses Gebilde mit Nested Sets abbilden und die Ensemles/Künstler m:n an die Blätter oder auch Verzweigungen mappen.
Lo!