Heim >Datenbank >MySQL-Tutorial >Wie kann ich Nachkommen oder Vorfahren in einer MySQL-Baumstruktur effizient abfragen, ohne die Tiefe anzugeben?
Baumstrukturabfrage in MySQL: Tiefenunabhängige Durchquerung
Der Zugriff auf Baumstrukturdaten in MySQL erfordert häufig rekursive oder sequentielle Abfragen. Es ist jedoch möglich, mit einer einzigen Abfrage alle Nachkommen oder Vorfahren einer bestimmten Zeile in einer baumstrukturierten Tabelle abzurufen, ohne die Tiefenebene explizit anzugeben. Diese Technik wird als „Modified Preorder Tree Traversal“ bezeichnet.
Abfragemethodik
In einer Baumstrukturtabelle mit den Spalten „id“, „data“ und „parent_id“ kann eine modifizierte Preorder-Traversal-Abfrage durchgeführt werden wie folgt formuliert werden:
SELECT id, data, parent_id FROM tree_table WHERE id IN ( SELECT id FROM tree_table WHERE ancestry LIKE '%given_id/%' )
Hier stellt „give_id“ die ID der Zeile dar, für die Sie Nachkommen abrufen möchten oder Vorfahren.
Verwendung und Implementierung
Die Abfragezeichenfolge „ancestry LIKE ‚%given_id/%“ filtert nach Zeilen, die die angegebene ID als Teil ihrer Abstammung haben Weg. Dadurch wird sichergestellt, dass alle Nachkommen (zusammen mit der angegebenen Zeile) zurückgegeben werden. Um Vorfahren abzurufen, ersetzen Sie einfach „%given_id/%“ durch „%/given_id/%“.
Zum Beispiel in PHP mit MySQLi:
$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");
Zusätzliche Informationen
Das bereitgestellte PHP-Beispiel von Sitepoint (in der Antwort erwähnt) bietet eine umfassende Veranschaulichung dieser Technik. Weitere Einblicke in den Umgang mit Baumstrukturen in SQL finden Sie in Joe Celkos „Trees and Hierarchies in SQL for Smarties“.
Das obige ist der detaillierte Inhalt vonWie kann ich Nachkommen oder Vorfahren in einer MySQL-Baumstruktur effizient abfragen, ohne die Tiefe anzugeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!