norbert =:-): Baumstruktur aus Datenbank auslesen

Beitrag lesen

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 =:-)