Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich hierarchische rekursive Abfragen in MySQL?

Wie erstelle ich hierarchische rekursive Abfragen in MySQL?

Linda Hamilton
Freigeben: 2025-01-25 16:02:14
Original
889 Leute haben es durchsucht

How to Create Hierarchical Recursive Queries in MySQL?

Erstellen hierarchischer rekursiver Abfragen in MySQL

Hierarchie verstehen

Um hierarchische Abfragen in MySQL zu erstellen, müssen Sie verstehen, wie Hierarchien aufgebaut sind. Betrachten Sie die folgende Beispieltabelle:

id 名称 父ID
19 类别1 0
20 类别2 19
21 类别3 20
22 类别4 21

In dieser Tabelle stellt die Spalte parent_id die ID der übergeordneten Kategorie einer bestimmten Kategorie dar. Kategorie 2 hat beispielsweise einen parent_id von 19, was darauf hinweist, dass es sich um eine Unterkategorie von Kategorie 1 handelt.

MySQL 8-Lösung: Rekursion WITH

Für MySQL 8 und höher können Sie die rekursive WITH-Syntax verwenden:

<code class="language-sql">WITH RECURSIVE cte (id, name, parent_id) AS (
  SELECT id, name, parent_id
  FROM products
  WHERE parent_id = 19
  UNION ALL
  SELECT p.id, p.name, p.parent_id
  FROM products p
  INNER JOIN cte ON p.parent_id = cte.id
)
SELECT * FROM cte;</code>
Nach dem Login kopieren

Diese Abfrage ruft rekursiv alle untergeordneten Kategorien für eine bestimmte übergeordnete ID ab (19 in diesem Beispiel). Die Ausgabe umfasst alle Kategorien, die direkt oder indirekt zur Kategorie 1 (id=19) gehören.

MySQL 5.x-Lösung: Inline-Variablen oder Selbstverknüpfung

Für ältere MySQL-Versionen (5.x) gibt es zwei Alternativen:

Inline-Variablen:

<code class="language-sql">SELECT id, name, parent_id
FROM (SELECT * FROM products ORDER BY parent_id, id) products_sorted,
     (SELECT @pv := '19') initialisation
WHERE FIND_IN_SET(parent_id, @pv)
  AND LENGTH(@pv := CONCAT(@pv, ',', id));</code>
Nach dem Login kopieren

Diese Abfrage nutzt die spezifischen Funktionen von MySQL, um während der Ausführung Variablen zuzuweisen und zu ändern. Indem wir die Variable @pv mit der übergeordneten ID (in diesem Fall 19) initialisieren und mit der Funktion FIND_IN_SET prüfen, ob parent_id in der Nachkommenliste erscheint, können wir die Liste der Nachkommen-IDs inkrementell erstellen.

Selbstverbindung:

<code class="language-sql">SELECT DISTINCT child.id, child.name, child.parent_id
FROM products AS child
JOIN products AS parent ON child.parent_id = parent.id
WHERE parent.id = 19;</code>
Nach dem Login kopieren

Diese Abfrage durchläuft die Hierarchie beginnend bei der angegebenen übergeordneten ID (19) mithilfe eines Selbst-Joins. Indem wir die untergeordnete Tabelle mit der übergeordneten Tabelle basierend auf der Spalte parent_id verbinden, können wir alle Nachkommen eines bestimmten übergeordneten Elements rekursiv extrahieren.

Das obige ist der detaillierte Inhalt vonWie erstelle ich hierarchische rekursive Abfragen in MySQL?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage