Hallo Daniel!
Nur kurz zur Theorie:
Wie man Bäume speichert, hast Du ja beschrieben. Eine "Id" und eine "ParentId" wird für die Struktur benötigt - damit lassen sich Bäume in beliebiger Tiefe darstellen.
Zum Auslesen eignet sich grundsätzlich eine rekursive (sich selbst aufrufende) Funktion - hängt natürlich von der Programmierumgebung ab.
Also im Prinzip (mal ein php-Pseudocode):
function getnodeitems($spacer, $id)
{
/* Alle Einträge auslesen, welche die angegebene ID aufweisen.
Für jeden der gefundenen Einträge dann diese (!) Funktion erneut aufrufen und die jeweilige ID mit übergeben. Also zB: */
while (datengefunden)
{
/* Zuerst die Daten des aktuellen Eintrages ausgeben */
print($spacer . 'Daten des Eintrags');
/* Und nun weitere Einträge zu dieser ID suchen - also weiter in die Tiefe ... */
getnodeitems($spacer . '-', diejeweiligeid);
}
}
Gestartet wird das Ganze dann mit einmaligem Aufruf mit der "Root-ID":
getnodeitems('-', 0);
Das Ergebnis des Beispiels müsste dann in etwa so aussehen:
- Daten des Eintrags
-- Daten des Eintrags
--- Daten des Eintrags
-- Daten des Eintrags
Sieht etwas doof aus - aber als Grundlage sollte es reichen - ein wenig Datenbankmanipulation drumrum und es läuft.
Soweit zur Theorie - praktisch wird auch noch gerne aus Performancegründen ein "Pfad" mitverwaltet, der sich aus allen übergeordneten IDs zusammensetzt (zB 0_12_23_2) - könnte bei Such- oder Gruppierfunktionen ganz hilfreich sein ( ... where Path like '0_12%' - also alle Einträge zu einem bestimmten Zweig).
Mehr lässt sich dazu sicher im Archiv finden ;-)
mfg
norbert =:-)