Rekursion einer Baumstruktur in MySQL
Die Verwaltung hierarchischer Daten in einer Datenbank kann eine Herausforderung sein. Ein gängiger Ansatz besteht darin, eine Eltern-Kind-Beziehung zu verwenden, wie in der bereitgestellten Frage gezeigt. Während die Abfrage nach unmittelbaren Nachkommen unkompliziert ist, kann das Abrufen aller Nachkommen komplexer sein.
Die MySQL-Dokumentation schlägt mehrere Methoden zum Umgang mit hierarchischen Daten vor, darunter die folgenden:
Für das gegebene Beispiel würde die folgende Abfrage unter Verwendung der Pfadaufzählungsmethode alle Nachkommen eines übergeordneten Standorts abrufen:
WITH RECURSIVE descendant_path AS ( SELECT id, path FROM locations WHERE id IN (SELECT location_id FROM location_parent WHERE parent_id = '$locationid') UNION ALL SELECT l.id, CONCAT(dp.path, ',', l.id) FROM locations l JOIN descendant_path dp ON l.path LIKE CONCAT(dp.path, '%') ) SELECT id FROM descendant_path;
Diese Abfrage verwendet einen rekursiven CTE (Common Table Expression), um die Baumstruktur zu durchlaufen und einen Pfad für jeden untergeordneten Standort zu erstellen. Durch Angabe des Startorts in der ersten Abfrage können alle Nachkommen in einem einzigen Durchgang abgerufen werden.
Das obige ist der detaillierte Inhalt vonWie rufe ich alle Nachkommen in einer MySQL-Baumstruktur rekursiv ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!