So finden Sie den Hierarchiepfad für eine Baumdarstellung

8

Ich habe eine Baumhierarchie, die in eine Tabelle eingebaut ist, wobei die Eltern-ID auf den vorherigen Stammknoten zeigt.

Ich durchlaufe alle Wurzelknoten (root1, root2) und setze den Pfad entweder auf root1 oder root1 / child1 für root1 und child1. Um den Pfad für child1 zu finden, muss ich mindestens 2 Aufrufe machen, um den Pfad zu bilden. Gibt es eine effiziente Möglichkeit, den Pfad zu füllen, da wir mit einer sehr großen Anzahl von Wurzelknoten und untergeordneten Elementen arbeiten, die 5-7 Ebenen tief verschachtelt sind.

%Vor%     
Sam 23.03.2013, 06:23
quelle

5 Antworten

10

Sie können mit einer gespeicherten Prozedur gehen, wie Sie in Ihrer Frage erwähnt haben, da die Verschachtelung bis zu 7 Ebenen tief sein kann.

Gespeicherte Prozedur

%Vor%

Um den aktuellen Datensatz zu überprüfen, haben wir einfach die einfachen Datensätze mit dem Nullwert in der Pfadspalte

gedruckt %Vor%

Ergebnisse :

%Vor%

Aufruf der Prozedur :

%Vor%

Ergebnis nach Ausführung der Prozedur :

%Vor%

Ergebnisse :

%Vor%

SQLFIDDLE

Hoffe, das hilft ...

    
Meherzad 07.04.2013 10:17
quelle
1

Ich mag Modified Preorder Tree Traversal sehr. Es ermöglicht Ihnen, eine ganze Baumhierarchie in einer einzigen Abfrage zu erhalten. Hier ist ein ausführliches Tutorial: Ссылка

Wenn Sie irgendwelche Fragen zu MPTT haben, lassen Sie es mich wissen und ich würde mich freuen, Ihnen zu helfen!

    
chrislondon 08.04.2013 12:41
quelle
0

Obwohl dies in einem einzelnen Aufruf nicht unbedingt möglich ist, können Sie mehrere Aufrufe ausblenden, sie jedoch in eine MySQL-Funktion einfügen, die Sie von Ihrem SQL aus aufrufen, wodurch der übergeordnete Pfad zurückgegeben wird.

Obwohl dies wahrscheinlich effizienter wäre als in einem Skript, würde ich nicht erwarten, dass es so effizient ist.

Wenn die maximale Anzahl von Ebenen festgelegt ist, könnten Sie JOINs wie folgt verwenden: -

%Vor%

Obwohl dies funktioniert, ist es ziemlich restriktiv (dh wenn sich die maximale Anzahl der Stufen ändert, müßten Sie jedes Bit von SQL mit diesem ändern), und wenn die Anzahl der Stufen etwas anderes als klein ist, wird es unlesbar Chaos.

    
Kickstart 02.04.2013 16:07
quelle
0

Sie könnten in Erwägung ziehen, eine Abschlusstabelle hinzuzufügen, die alle Pfade von jeder Baumwurzel bis zu den Blättern. Die transitive Schließung von Graphen in SQL beizubehalten (ab 1999) beschreibt einige der theoretischer Hintergrund.

Der stackoverflow Bewertungsfrage on Hierarchische Daten beschreiben eine Anzahl der alternativen Ansätze. Dort verweist Tegiri Nenashi auf eine umfassende Bibliographie, die Hierarchische Daten in RDBMS .

Closure-Tabelle hat den Vorteil, dass die Abfragen effizient sind und die Lösung keinen Einfluss auf Ihre aktuelle Datenstruktur hat. Sie müssen Ihre Tabelle mit der Schließungstabelle erweitern und beibehalten, wenn die Gesamtstruktur geändert wird.

Sie geben eine große Anzahl von Elementen in der Tabelle mit kurzen Pfaden an. Dies bewirkt, dass die Leistung des Schließtisches mit geeigneten Indizes nahezu linear bleibt. Sie können auch den Pfad zu jedem Knoten in der close-Tabelle beibehalten, um eine Neuberechnung zu vermeiden. Der Ansatz hat eine konstante Anzahl von Abfragen für jede Operation und unterstützt Hierarchien beliebiger Tiefe.

    
Pekka 07.04.2013 18:08
quelle
0

Sie sollten das geschachtelte Mengenmodell verwenden Ссылка

    
Michael Sivolobov 09.04.2013 11:59
quelle

Tags und Links