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%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.
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%Hoffe, das hilft ...
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!
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.
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.
Sie sollten das geschachtelte Mengenmodell verwenden Ссылка
Tags und Links sql mysql hierarchical-data