Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit einer einzigen rekursiven Abfrage alle übergeordneten Datensätze in einer MySQL-Tabelle finden?
Übergeordnete Elemente in einer MySQL-Tabelle mit Rekursion finden
In einem Datenbankschema ist die Einrichtung hierarchischer Beziehungen üblich. Bei der Abfrage solcher Daten ist es erforderlich, nicht nur bestimmte Datensätze, sondern auch deren hierarchische Verbindungen abzurufen. Dieser Artikel befasst sich mit der Aufgabe, mit einer einzigen Abfrage alle übergeordneten Elemente eines Datensatzes in einer MySQL-Tabelle zu finden.
Problemstellung
Gegeben sei eine Tabelle mit den Spalten ID und TITLE , CONTROLLER, METHOD und PARENT_ID, finden Sie mit einer einzigen SQL alle Eltern eines Datensatzes, dessen TITEL „Kategorien“ lautet Abfrage.
Gewünschte Ausgabe
Die Ausgabe sollte Folgendes anzeigen Spalten:
und sollte das abrufen Datensätze:
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
Lösung
Um die gewünschte Ausgabe zu erzielen, müssen wir die rekursiven Abfragefunktionen von MySQL nutzen. Hier ist die SQL-Abfrage, die wir verwenden können:
SELECT T2.id, T2.title,T2.controller,T2.method,T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
Lassen Sie uns diese Abfrage aufschlüsseln:
Durch Ausführung Mit dieser Abfrage können wir alle übergeordneten Elemente des Datensatzes mit TITLE als „Kategorien“ in einem einzigen Datenbankaufruf abrufen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit einer einzigen rekursiven Abfrage alle übergeordneten Datensätze in einer MySQL-Tabelle finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!