Heim > Datenbank > MySQL-Tutorial > Wie kann ich mit einer einzigen Abfrage alle übergeordneten Knoten eines bestimmten Eintrags in einer MySQL-Hierarchie finden?

Wie kann ich mit einer einzigen Abfrage alle übergeordneten Knoten eines bestimmten Eintrags in einer MySQL-Hierarchie finden?

Linda Hamilton
Freigeben: 2024-11-30 11:54:18
Original
346 Leute haben es durchsucht

How Can I Find All Parent Nodes of a Specific Entry in a MySQL Hierarchy Using a Single Query?

Alle übergeordneten Elemente in einer MySQL-Tabelle mit einer einzigen Abfrage finden (rekursive Abfrage)

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.

Herausforderung:

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.

Lösung:

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;
Nach dem Login kopieren

Erklärung:

  • Die Unterabfrage initialisiert zwei Benutzervariablen @r (ID des aktuellen Knotens) und @l (Ebene des aktuellen Knotens). ) mit den Anfangswerten 31 (ID von „Kategorien“) bzw. 0.
  • Die äußere Abfrage durchläuft die Tabelle und aktualisiert @r mit die übergeordnete ID des aktuellen Knotens und das Erhöhen von @l, um den Überblick über die aktuelle Ebene zu behalten.
  • Das Ergebnis der äußeren Abfrage (T1) wird basierend auf der gemeinsamen Spalte _id mit der Originaltabelle (T2) verknüpft.
  • Abschließend wird das Ergebnis in absteigender Reihenfolge der Ebene sortiert, um die übergeordneten Knoten hierarchisch darzustellen Bestellung.

Ausgabe:

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage