Andreas N.: Kind Elemente in einer Hierarchie/Baumstruktur

Beitrag lesen

Hallo Bio,

Tabelle object:

| id        |
| name      |

parent_id

Warum schreibst Du eigentlich nicht

SELECT object.name
FROM object
WHERE parent_id = id;

ich verstehe nicht so ganz was Du meinst. Denn mit dem SQL Statement erhalte ich nicht die gewünschte Ausgabe (genau genommen gar keine Datensätze ;-) oder ich habe etwas übersehen?

Vielleicht habe ich mich in meinem ersten Posting etwas ungenau ausgedrückt. Ich möchte alle Kind Elemente erhalten, also auch die Kindes Kinder und wiederum deren Kinder usw.

In der Tabelle object ist die 'id' der Primärschlüssel, 'name' ein beliebiger Name und 'parent_id' zeigt wieder auf die 'id'.

Beispiel Daten für die object Tabelle:

| id | name | parent_id |
-------------------------
|  1 | a    |    0      |
|  2 | b    |    0      |
|  3 | aa   |    1      |
|  4 | aaa  |    3      |
|  5 | aaaa |    4      |
|  6 | bb   |    2      |
|  7 | bbb  |    6      |

Für die id=1 wären es die Datensätze:

| id | name | parent_id |
-------------------------
|  3 | aa   |    1      |
|  4 | aaa  |    3      |
|  5 | aaaa |    4      |

Also die ids 3, 4 und 5. So würde das Statement um die Namen aller Kinder (und Kindes Kinder) zu ermitteln wie folgt aussehen:

SELECT
 object.name
FROM
 object
WHERE
 object.id IN (3,4,5)

Dies liefert mir die gewünschten Namen "aa","aaa" und "aaaa".

Diese Liste mit allen Kindern kann ich natürlich serverseitig ermitteln, doch bei relativ vielen Datensätzen (ca. 280.000) wie in meinem Fall würde im Statement der 'IN (x,y,z)'-Teil sehr groß werden.

Die Idee ist dies mit Hilfe einer zweiten Tabelle und dem entsprechendem JOIN zu verhindern.

Viele Grüße
Andreas