Heim > Datenbank > MySQL-Tutorial > Wie kann man mit rekursiven Abfragen in MySQL effizient durch hierarchische Daten navigieren?

Wie kann man mit rekursiven Abfragen in MySQL effizient durch hierarchische Daten navigieren?

Mary-Kate Olsen
Freigeben: 2025-01-25 15:52:14
Original
326 Leute haben es durchsucht

How to Efficiently Navigate Hierarchical Data with Recursive Queries in MySQL?

mysql geschichtete Daten -Traversal und rekursive Abfrage

Bei der Verarbeitung hierarchischer Strukturdaten in der MySQL -Datenbank kann es eine Herausforderung sein, Daten auf verschiedenen Ebenen verschiedener Ebenen zu durchqueren und abzurufen. In diesem Artikel wird eine umfassende Methode zur Erstellung rekursiver Abfragen in MySQL vorgestellt und Lösungen für moderne Versionen und Relikte bereitgestellt.

rekursive Abfrage von MySQL 8.0

MySQL 8.0 führte eine leistungsstarke WITH RECURSIVE Grammatik ein, mit der Sie einfache und effiziente rekursive Abfrage schreiben können. Zum Beispiel:

<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 cte.id = p.parent_id
)
SELECT * FROM cte;</code>
Nach dem Login kopieren

In dieser Abfrage wird der öffentliche Uhrenausdruck (CTE) mit dem Namen cte von der Tabelle products, beginnend aus den angegebenen parent_id (hier 19), rekursiv durchquert und alle seine Sub -Nodes abrufen.

MySQL 5.x rekursive Abfrage

Vor MySQL 8.0 wurden direkte rekursive Abfragen nicht unterstützt. Sie können jedoch zwei alternative Methoden verwenden:

Wert von 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 komplexe Abfrage verwendet Variablen in der Abfrage selbst. Es erkennt den Sub -Node nach (in diesem Beispiel 19). Diese Methode kann jedoch Leistungsprobleme auf dem großen Datensatz haben.

parent_id Pfadstyling -Kennung:

Baum -ID -Struktur mit Pfadstil -Kennern kann eine rekursive Abfrage vereinfachen. Zum Beispiel:

Diese Methode ermöglicht die Verwendung des Entzuges, damit sie effizient durchquert wird:

<code class="language-sql">CREATE TABLE products (id VARCHAR(255) PRIMARY KEY, name VARCHAR(255));
INSERT INTO products (id, name) VALUES ('19', 'category1');
INSERT INTO products (id, name) VALUES ('19/1', 'category2');
INSERT INTO products (id, name) VALUES ('19/1/1', 'category3');
INSERT INTO products (id, name) VALUES ('19/1/1/1', 'category4');</code>
Nach dem Login kopieren

Zusammenfassung

Die Methode der rekursiven Abfrage in MySQL hängt von den spezifischen Versionen und Datensätzen ab. Für die moderne MySQL -Version bietet
<code class="language-sql">SELECT * FROM products WHERE id LIKE '19%';</code>
Nach dem Login kopieren
Grammatik eine elegante und effiziente Lösung. Für die verbleibende Version kann die alternative Methode der obigen Übersicht verwendet werden, und ihre Leistung ist unterschiedlich.

Das obige ist der detaillierte Inhalt vonWie kann man mit rekursiven Abfragen in MySQL effizient durch hierarchische Daten navigieren?. 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