Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit einer einzigen rekursiven Abfrage alle übergeordneten Datensätze in einer MySQL-Tabelle finden?

Wie kann ich mit einer einzigen rekursiven Abfrage alle übergeordneten Datensätze in einer MySQL-Tabelle finden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-06 18:59:12401Durchsuche

How Can I Find All Parent Records in a MySQL Table Using a Single Recursive Query?

Ü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:

  • id
  • Titel
  • Controller
  • Methode
  • URL
  • parent_id

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:

  • Die innere Abfrage (SELECT @r AS _id, ...) generiert eine Hierarchie von Datensätze durch rekursive Auswahl der PARENT_ID und Erhöhen der Ebene.
  • Die äußere Abfrage (SELECT T2.id, ...) verbindet die innere Abfrage mit dem ursprünglichen Tabellenmenü (umbenannt in T2), um die gewünschten Daten zu erhalten.
  • Die ORDER BY-Klausel sortiert die Ergebnisse nach Ebene in absteigender Reihenfolge.

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!

Stellungnahme:
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