Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie rufe ich alle Nachkommen in einer MySQL-Baumstruktur rekursiv ab?

DDD
Freigeben: 2024-10-23 19:45:30
Original
508 Leute haben es durchsucht

How to Recursively Retrieve All Descendants in a MySQL Tree Structure?

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:

  • Pfad Aufzählung: Bei dieser Methode wird der Pfad von jedem Knoten zur Wurzel des Baums in einer Datenbankspalte gespeichert. Abfragen können diese Spalte dann zum effizienten Abrufen von Nachkommen verwenden.
  • Angrenzende Liste: Dieser Ansatz speichert die Eltern-Kind-Beziehungen in einer einzelnen Tabelle, wobei jede Zeile einen Knoten und seinen direkten übergeordneten Knoten darstellt. Obwohl die Implementierung einfach ist, sind mehrere Abfragen erforderlich, um alle Nachkommen abzurufen.
  • Verschachtelte Mengen: Diese fortgeschrittenere Methode verwendet ein Spaltenpaar, um die linke und rechte Position jedes Knotens innerhalb zu speichern Baum. Es bietet einen effizienten Abruf von Nachkommen, erfordert jedoch komplexere Tabellenaktualisierungen.

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;
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!