Heim  >  Artikel  >  Datenbank  >  Wie kann man eine Baumstruktur in MySQL rekursiv durchlaufen?

Wie kann man eine Baumstruktur in MySQL rekursiv durchlaufen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 04:59:02237Durchsuche

How to Recursively Traverse a Tree Structure in MySQL?

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!

Stellungnahme:
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