SQL Rekursion
-
Hallo,
ich habe eine MySQL Datenbank mit folgende Tabellen:-------------------------
ORDNER | ELTERN | KIND
-------------------------
root......| NULL ... | 1
a_1.......| 1 ....... | 2
a_2.......| 1 ....... | 3
a_3.......| 1 ....... | 4
b_1.......| 2 ....... | 5
b_2.......| 2 ....... | 6
b_3.......| 2 ....... | 7
c_1.......| 4 ....... | 8
d_1.......| 3 ....... | 55
d_2.......| 3 ....... | 122Es siet ungeführ so aus:
root_
...... | - a_1 _
.................. | - b_1
.................. | - b_2
.................. | - b_3...... | - a_2 _
.................. | - d_1
.................. | - d_2
............................................ // also hier können mehrere Unterordner kommen, oder Unter - Unterordner und soweiter....... | - a_3 _
.................. | - c_1Wie kann ich eine Rekursive SQL-Abfrage aufbauen, damit man für einen Ordner (z.B a_2) alle Unterordner bekommt?
Es können aber beliebig viele unter - unter Ordner in d_1 und d_2 ect. sein. Also die Verschachtelung ist nicht vorhersehbar!
-
Unter Oracle geht das mit einem "select ... connect by" Statement. Vielleicht gibts das auch bei MySQL.
-
Das ganze ist ja nichts anderes als eine relationstabelle, soll heißen
wenn du alle "KIND" eines "ELTERN" bekommen möchtest könnte das so aussehen:SELECT [table_name].KIND FROM [table_name] WHERE [table_name].ELTERN = [eltern_id];
also z.B.:
SELECT [table_name].KIND FROM [table_name] WHERE [table_name].ELTERN = 2;
-
die meisten sql implementationen können sowas nicht
aber google hilft, mit "Modified Preorder Tree Traversal" kann man des z.b. machen