Rekursion einer Baumstruktur in MySQL
Bei der Arbeit mit hierarchischen Daten ist es oft notwendig, die Nachkommen eines bestimmten Knotens im Baum abzurufen Struktur. Im Kontext von MySQL, wo sich ein Standort innerhalb eines anderen Standorts befinden kann, wird die Aufgabe mit zunehmender Anzahl der Ebenen komplexer.
Die bereitgestellte PHP/MySQL-Abfrage:
$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN ( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
effektiv Ruft die unmittelbaren Nachkommen eines bestimmten Standorts ab.
Um jedoch alle Nachkommen unabhängig von der Tiefe abzurufen, ist ein rekursiver Ansatz erforderlich. MySQL unterstützt rekursive Abfragen nicht nativ, aber es gibt eine elegante Lösung, die in dem unten verlinkten ausführlichen Artikel von mysql.com beschrieben wird:
[Managing Hierarchical Data in MySQL](https://www.mysql.com/news -and-events/mysql-perspectives/performance-tuning-json-mysql-for-hierarchical-data/)
Dieser Artikel stellt verschiedene Ansätze zum Umgang mit hierarchischen Daten vor, einschließlich der Option der Verwendung von CTEs (Common Tabellenausdrücke) zur Implementierung der Rekursion:
WITH RECURSIVE descendants (id, parent_id) AS ( SELECT id, parent_id FROM locations UNION ALL SELECT l.id, l.parent_id FROM locations l JOIN descendants d ON l.parent_id = d.id ) SELECT DISTINCT id FROM descendants WHERE parent_id = $locationid;
Durch die Verwendung des UNION ALL-Operators erweitert der CTE iterativ die Liste der Nachkommen, sodass MySQL die vollständige Hierarchie aus einer einzigen Abfrage abrufen kann.
Das obige ist der detaillierte Inhalt vonWie kann man eine Baumstruktur in MySQL rekursiv durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!