Heim > Datenbank > MySQL-Tutorial > Wie kann die Tiefensuche von MySQL effektiv alle Vorfahren eines Knotens in einer hierarchischen Struktur abrufen?

Wie kann die Tiefensuche von MySQL effektiv alle Vorfahren eines Knotens in einer hierarchischen Struktur abrufen?

Barbara Streisand
Freigeben: 2024-12-08 10:27:15
Original
183 Leute haben es durchsucht

How Can MySQL's Depth-First Search Effectively Retrieve All Ancestors of a Node in a Hierarchical Structure?

Hierarchische Abfragen in MySQL: Abstammung mit Tiefensuche durchqueren

Das Bestimmen von Abstammungsbeziehungen innerhalb hierarchischer Daten ist eine häufige Aufgabe in der Datenbankverwaltung. In MySQL können Sie mit hierarchischen Abfragen effektiv navigieren und Daten aus verschachtelten Strukturen abrufen.

Angenommen, Sie haben eine Tabelle mit dem Namen „mytable“ mit zwei Spalten, „a“ und „b“, die ein hierarchisches Eltern-Kind-System darstellen Beziehung:

| a | b |
----------
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 3 | 6 |
| 4 | 7 |
Nach dem Login kopieren

Stellen Sie sich das Szenario vor, in dem Sie alle Vorfahren eines bestimmten Knotens abrufen möchten, beispielsweise alle Eltern, Großeltern usw. des Knotens 5.

Lösung, die den in der Tiefe verwendeten Algorithmus nutzt:

MySQL bietet eine hierarchische Abfragelösung unter Verwendung eines Tiefensuchansatzes (DFS). Hier ist eine Abfrage, die dies erreicht:

SELECT  @id :=
        (
        SELECT  senderid
        FROM    mytable
        WHERE   receiverid = @id
        ) AS person
FROM    (
        SELECT  @id := 5
        ) vars
STRAIGHT_JOIN
        mytable
WHERE   @id IS NOT NULL
Nach dem Login kopieren

Analyse:

  • Die verschachtelte Abfrage initialisiert die Variable „@id“ mit dem Knoten (5), dessen Vorfahren, die wir finden möchten.
  • Die äußere Abfrage ruft iterativ das direkte übergeordnete Element der aktuellen „@id“ mithilfe von ab 'senderid'-Feld von 'mytable'.
  • Der 'STRAIGHT_JOIN' stellt sicher, dass die Abfrage der Hierarchie ohne Optimierungen folgt, die die Eltern-Kind-Beziehung umgehen könnten.
  • Die Variable '@id' wird in jeder Iteration mit der „Sender-ID“ des übergeordneten Knotens aktualisiert und der Prozess wird fortgesetzt, bis keine übergeordneten Knoten mehr vorhanden sind.

Von Wenn Sie diese Abfrage ausführen, erhalten Sie eine Liste der Vorfahren für Knoten 5: 4, 3, 2 und 1. Diese Methode durchläuft effektiv die Hierarchie mithilfe eines DFS-Ansatzes und ermöglicht Ihnen die Navigation durch komplexe Eltern-Kind-Strukturen in Ihrer MySQL-Datenbank.

Das obige ist der detaillierte Inhalt vonWie kann die Tiefensuche von MySQL effektiv alle Vorfahren eines Knotens in einer hierarchischen Struktur abrufen?. 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