Heim > Datenbank > MySQL-Tutorial > Wie rufe ich mit MySQL alle Nachkommen in einer hierarchischen Struktur ab?

Wie rufe ich mit MySQL alle Nachkommen in einer hierarchischen Struktur ab?

DDD
Freigeben: 2024-11-04 12:08:29
Original
850 Leute haben es durchsucht

How to Retrieve All Descendants in a Hierarchical Structure Using MySQL?

Abrufen hierarchischer untergeordneter Daten in MySQL: Mehrstufige rekursive Auswahl

Im Bereich von Datenbankabfragen ist es häufig erforderlich, nicht nur unmittelbare Daten zu extrahieren untergeordnete Daten, aber auch mehrstufige absteigende Informationen. Dies ist insbesondere in hierarchischen Strukturen wie Organigrammen oder verschachtelten Verzeichnissystemen relevant.

Stellen Sie sich eine Datenbanktabelle mit dem Namen „Folder“ vor, die ein Dateiverzeichnis modelliert. Jeder Ordner verfügt über eine eindeutige ID, einen Namen und optional eine übergeordnete Ordner-ID. Unser oberstes Ziel ist es, eine Abfrage zu entwickeln, die bei gegebener ID eines übergeordneten Ordners alle untergeordneten Ordner, untergeordneten Ordner usw. abrufen kann und so effektiv eine umfassende hierarchische Ansicht bietet.

Abfrageanalyse

Die bereitgestellte Abfrage nutzt die MySQL-Funktion GROUP_CONCAT(), um die hierarchischen Informationen zu aggregieren. Es verwendet eine verschachtelte SELECT-Anweisung, um alle untergeordneten Ordner iterativ abzurufen, indem ihre IDs in einer durch Kommas getrennten Liste verkettet werden. Diese Liste wird dann in einer Variablen lv gespeichert und als Filter verwendet, um schrittweise weitere Ebenen von untergeordneten Elementen zu identifizieren.

Die äußerste SELECT-Anweisung gruppiert einfach die verkettete Liste der untergeordneten IDs für jede Iteration und stellt sie als Komma dar. getrennte Zeichenfolge. Durch die Verwendung der Funktion FIND_IN_SET() stellt die Abfrage sicher, dass jedes Kind innerhalb des Satzes zuvor identifizierter Kinder-IDs durchsucht wird.

Ausführung

Betrachten Sie den Beispieldatensatz:

idFolder FolderName idFolderParent
1 ADoc NULL
2 ADoc1 7
3 ADoc2 2
4 ADoc3 3
5 ADoc4 NULL
6 ADoc5 5
7 ADoc6 5

Um alle untergeordneten Ordner und ihre Nachkommen für die übergeordnete Ordner-ID 5 abzurufen, führen Sie die folgende Abfrage aus:

<code class="sql">SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
JOIN
(SELECT @pv:=5) tmp
) a;</code>
Nach dem Login kopieren

Das Ergebnis ist eine durch Kommas getrennte Liste aller untergeordneten Ordner und untergeordnete IDs:

6,7,2,3,4
Nach dem Login kopieren

Fazit

Die bereitgestellte Abfrage bietet eine robuste Lösung zum Abrufen hierarchischer untergeordneter Daten in MySQL und bietet einen umfassenden Überblick über die Ordnerstruktur und ihre verschachtelte Beziehungen. Es durchläuft effektiv die Hierarchie, ohne dass Änderungen an der Datenbankstruktur erforderlich sind oder auf eine vordefinierte Reihenfolge der Eltern-Kind-Beziehungen angewiesen ist. Diese Lösung erweist sich besonders bei der Verwaltung komplexer hierarchischer Datenstrukturen als wertvoll.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit MySQL alle Nachkommen in einer hierarchischen Struktur ab?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage