mysql geschichtete Daten -Traversal und rekursive Abfrage
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>
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.
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>
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>
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>
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!