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>
Das Ergebnis ist eine durch Kommas getrennte Liste aller untergeordneten Ordner und untergeordnete IDs:
6,7,2,3,4
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!