Heim > Datenbank > MySQL-Tutorial > Wie kann ich Nachkommen und Vorfahren in einer MySQL-Baumstruktur effizient abfragen?

Wie kann ich Nachkommen und Vorfahren in einer MySQL-Baumstruktur effizient abfragen?

DDD
Freigeben: 2025-01-06 18:24:10
Original
372 Leute haben es durchsucht

How Can I Efficiently Query Descendants and Ancestors in a MySQL Tree Structure?

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

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

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!

Quelle:php.cn
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