Bei der Datenbankverwaltung kann das Abrufen hierarchischer Daten häufig komplexe Abfragen mit rekursiven Algorithmen erfordern. Ein solches Szenario entsteht, wenn wir alle übergeordneten Knoten eines bestimmten Eintrags in einer hierarchischen Tabelle wie der oben dargestellten extrahieren müssen.
Betrachten Sie die bereitgestellte Tabelle mit einer Hierarchie von Menüelementen , wobei jeder Knoten eine ID, einen Titel und eine übergeordnete ID hat. Unser Ziel ist es, mit einer einzigen MySQL-Abfrage alle übergeordneten Knoten des Eintrags mit dem Titel „Kategorien“ abzurufen.
Wir können eine rekursive Abfrage verwenden, um die Tabelle zu durchlaufen und zu akkumulieren übergeordnete Knoten auf jeder Ebene. Die folgende Abfrage erreicht dies:
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;
Das Ausführen der Abfrage erzeugt die 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 |
Das obige ist der detaillierte Inhalt vonWie kann ich mit einer einzigen Abfrage alle übergeordneten Knoten eines bestimmten Eintrags in einer MySQL-Hierarchie finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!