Kalle_B: rekursive DB-Abfrage - wie?

Hallöle,

es gibt Organisationen, die mehrere Ebenen haben, z.B.

  • Deutscher Chorverband
  • Hessischer Sängerbund
  • Sängerkreis XYZ (Kreisebene)
  • Verein (kann mahrere Chöre haben)
  • Chor

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

  • Chor C1 gehört zu Verein V1
  • Verein V1 gehört zu Kreis K1,
  • Kreis K1 gehört zu Land L1
  • Land L1 gehört zum Bund.

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

  1. Hi!

    Aber was wäre mit sechs Ebenen? Gibt es bei Datenbankabfragen Rekursion?

    Rekursive Abfragen sollte man vermeiden. Es gibt Nested Sets.

    Lo!

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

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

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

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

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

              --
              -------------------
              sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
              Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
              1. 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!

          2. 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!