Alle übergeordneten Elemente in einer MySQL-Tabelle mit einer einzigen rekursiven Abfrage finden
Betrachten Sie das folgende MySQL-Tabellenschema mit Beispieldaten:
| ID | TITLE | CONTROLLER | METHOD | PARENT_ID | |----|-------------------|------------|-------------------|-----------| | 1 | Dashboard | admin | dashboard | 0 | | 2 | Content | admin | content | 0 | | 3 | Modules | admin | modules | 0 | ...
Herausforderung:
Unser Ziel ist um alle übergeordneten Elemente eines bestimmten Datensatzes zu finden, nämlich des mit Titel = „Kategorien“, mithilfe einer einzigen SQL-Abfrage.
Gewünschte Ausgabe:
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:
Wir verwenden einen rekursiven gemeinsamen Tabellenausdruck (CTE), um die Tabellenhierarchie zu durchlaufen und Identifizieren Sie alle Vorfahren des gewünschten Datensatzes:
WITH RECURSIVE Parents AS ( SELECT id, parent_id FROM menu WHERE id = 31 UNION ALL SELECT m.id, m.parent_id FROM Parents AS p JOIN menu AS m ON p.parent_id = m.id ) SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id FROM Parents AS p JOIN menu AS m ON p.id = m.id ORDER BY p.id DESC;
Erklärung:
Durch Ausführen dieser Abfrage erhalten wir die gewünschte Ausgabe und listen alle übergeordneten Elemente von auf den Kategoriendatensatz.
Das obige ist der detaillierte Inhalt vonWie finde ich alle Vorfahren eines Datensatzes in einer MySQL-Tabelle mithilfe einer einzigen rekursiven Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!