Einzelabfrage-Baumstrukturabfrage in MySQL
In SQL werden Baumstrukturen häufig in Tabellen mit Spalten für ID, Daten usw. gespeichert Eltern-ID. Das Abrufen aller Nachkommen oder Vorfahren einer bestimmten Zeile kann eine Herausforderung sein, insbesondere angesichts ihrer potenziell unbekannten Tiefe.
Abfrage nach Nachkommen
Um alle Nachkommen einer bestimmten Zeile abzurufen, Wir können eine Technik namens Modified Preorder Tree Traversal verwenden. Wie von Joe Celko in „Trees and Hierarchies in SQL for Smarties“ beschrieben, beinhaltet dieser Ansatz die Erstellung eines rekursiven gemeinsamen Tabellenausdrucks (CTE) mit der folgenden Struktur:
WITH RECURSIVE Descendants AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Descendants AS T JOIN tree_table t ON t.parent_id = T.id ) SELECT * FROM Descendants;
Dieser CTE identifiziert rekursiv alle untergeordneten Zeilen für Die angegebene Startzeile wird dann durch die Hierarchie fortgesetzt, bis sie die Blattknoten erreicht.
Abfrage nach Vorfahren
Um alle Vorfahren einer bestimmten Zeile abzurufen, können wir einen ähnlichen Ansatz mit einer leichten Modifikation verwenden:
WITH RECURSIVE Ancestors AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Ancestors AS T JOIN tree_table t ON t.id = T.parent_id ) SELECT * FROM Ancestors;
Dieser CTE identifiziert rekursiv alle übergeordneten Zeilen für den angegebenen Start Zeile und setzt sich dann nach oben durch die Hierarchie fort, bis sie den Wurzelknoten erreicht.
Beispiel Implementierung
Ein funktionierendes Beispiel dieser Abfragen in PHP finden Sie unter: http://www.sitepoint.com/article/hierarchical-data-database/2/
Das obige ist der detaillierte Inhalt vonWie kann ich Nachkommen und Vorfahren in einer MySQL-Baumstruktur effizient abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!