MySQL rekursiv
Viele Datenstrukturen, wie z. B. Dateisysteme oder Gewebestrukturdiagramme, erfordern effiziente Methoden, um Daten basierend auf übergeordneten Kind -Beziehungen abzurufen. MySQL bietet mehrere Methoden zum Schreiben rekursiver Abfragen, die diese Strukturen effektiv durchquert haben.
MySQL 8 rekursive GrammatiklösungMySQL 8 führt rekursiv mit Grammatik ein, was die rekursive Abfrage erheblich vereinfacht.
ersetzen Sie einfach den Wert von durch die übergeordnete Knoten -ID, die Sie Ihren untergeordneten Knoten abrufen möchten.
<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 JOIN cte ON p.parent_id = cte.id ) SELECT * FROM cte;</code>
parent_id = 19
Vor MySQL 8 müssen Sie andere Methoden zur rekursiven Abfrage verwenden. Eine Methode besteht darin, die Pfad -ID zuzuordnen und die hierarchischen Informationen in die Spalte ID einzubetten.
Jetzt werden die folgenden Anfragen alle Sub -Nodes der Kategorie 1 abrufen:
ID | NAME |
---|---|
19 | category1 |
19/1 | category2 |
19/1/1 | category3 |
19/1/1/1 | category4 |
MySQL 5.x Eine weitere Option besteht darin, rekursive Abfragen mit internen Variablen, Pfad -IDs oder Self -Connection zu erstellen. Hier sind Beispiele für interne Variablen:
<code class="language-sql">SELECT * FROM products WHERE id LIKE '19%'</code>
Zusammenfassung
<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>
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe rekursiver Abfragen effizient hierarchische Daten in MySQL abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!