Vinzenz Mai: DB-Frage

Beitrag lesen

Sorry Dennis,

Du hast den OP nicht verstanden. Du hast auch nicht verstanden, wie der OP den "Vater", ich würde es eher Wurzel nennen, definiert. Deswegen verfehlst Du mit Deinen Folgerungen leider das Thema.

Nein, die Vater ID ist nichts was du berrechnest - es ist eine (wichtige) Information wo in der Struktur ein Posting sich befindet. Wenn du die berrechnen könntest, könntest du auch berrechnen wo ich mich morgen um 16:30 Uhr aufhalten ;-)

Die ID der Wurzel ist, wenn der Baum sauber aufgebaut ist, d.h. keine Zirkularbezüge enthält, sehr wohl berechenbar.

Wenn du eine Struktur hast, kannst du diese natürlich in beide Richtungen durchgehen bzw. abarbeiten klar, aber dein Problem ist, dass du diese Struktur gar nicht hast, weil du keine Vater ID hast.

Selbstverständlich hat der OP eine Wurzel definiert. Dies ist der Eintrag mit der Parent-ID 1. Diese Definition halte ich für nicht ganz glücklich, meiner Meinung nach wäre es besser, wenn ein Wurzeleintrag als Parent-ID die NULL gewählt würde. Somit kann sich der OP den künstlichen ersten Tabelleneintrag sparen, den er sowieso nicht nutzt.

Weiterhin muss beim Aufbau des Baumes durch die Anwendung darauf geachtet werden, dass jeder Knoten, jedes Blatt eine eindeutige Wurzel aufweist. Mehrere Wurzeln wären prinzipiell gesehen auch möglich. Wenn Du den Baum nun von der Wurzel aus aufbaust, wirst Du feststellen, dass jeder Knoten in einer bestimmten Tiefe liegt. Obwohl es eine redundante Information ist, kann es aus Performancegründen interessant sein, die Tiefe in einer eigenen Spalte mit abzuspeichern (indiziert selbstverständlich). Denn der Elternknoten liegt exakt in einer um 1 kleineren Tiefe.

Bei besseren DBMS (als das heutige MySQL 4.x), d.h. bei einem, das "stored procedures" unterstützt, kann man recht einfach eine SP schreiben, die als Rückgabewert die ID, d.h. den Wert des Primärschlüssels des Wurzelknotens zurückliefert. Somit kann auch jedes davon eindeutig abhängige Feld dieser Tabelle eindeutig bestimmt werden.

Stehen SP nicht zur Verfügung, so ist diese Funktionalität am einfachsten in der API, d.h. in der Anwendung selbst zu lösen.

Freundliche Grüße

Vinzenz,

der hofft, den OP richtig verstanden zu haben.
Ich gehe davon aus, dass bei id=8 als Ergebnis g1 erwartet wird.