Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe rekursiver Abfragen in MySQL alle untergeordneten Ordner in einer verschachtelten Hierarchie abrufen?
Rekursive Abfrage für verschachtelte Ordner
Das Abrufen aller untergeordneten und untergeordneten Ordner mit mehreren Verschachtelungsebenen stellt eine Herausforderung für MySQL-Abfragen dar. Obwohl es verschiedene Ansätze gibt, konzentriert sich dieser Artikel auf eine effektive und umfassende Lösung.
Um alle untergeordneten Ordner eines bestimmten übergeordneten Ordners abzurufen, können wir rekursive Abfragen verwenden, die verschachtelte Berechnungen innerhalb einer einzigen Anweisung ermöglichen. Diese Methode beinhaltet einen iterativen Prozess, bei dem die ID jedes Ordners als Parameter für die nächste Iteration verwendet wird, wodurch die Suchtiefe mit jedem Zyklus erweitert wird.
Stellen Sie sich dieses Szenario vor: Gegeben sei eine Datenbanktabelle namens Folder mit den Spalten idFolder (auto -inkrementierter Primärschlüssel), FolderName und idFolderParent (Fremdschlüssel für Folder.idFolder) füllen wir es mit den folgenden Daten:
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 1 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | 4 |
6 | ADoc5 | 5 |
7 | ADoc6 | 4 |
Diese Struktur ermöglicht es uns, verschachtelte Ordnerhierarchien zu erstellen. Wenn wir beispielsweise alle untergeordneten Ordner von ADoc (idFolder=1) abfragen, erwarten wir, dass wir nicht nur seine unmittelbaren untergeordneten Ordner (ADoc1, ADoc2), sondern auch alle darunter liegenden untergeordneten Ordner (ADoc3, ADoc4, ADoc5, ADoc6, ADoc7) abrufen. .
Die folgende SQL-Abfrage erreicht dies mithilfe rekursiver Iteration:
<code class="sql">WITH RECURSIVE FolderHierarchy AS ( SELECT idFolder, FolderName, idFolderParent FROM Folder WHERE idFolder = 1 UNION ALL SELECT f.idFolder, f.FolderName, f.idFolderParent FROM FolderHierarchy AS h JOIN Folder AS f ON h.idFolderParent = f.idFolderParent ) SELECT idFolder, FolderName FROM FolderHierarchy;</code>
Diese Abfrage verwendet einen allgemeinen Tabellenausdruck (CTE) namens FolderHierarchy, der zunächst den Stammordner (ADoc) und dann rekursiv auswählt Fügt untergeordnete Ordner der Hierarchie hinzu. Dieser Vorgang wird fortgesetzt, bis keine weiteren untergeordneten Ordner mehr vorhanden sind, wodurch effektiv alle untergeordneten Ordner erfasst werden. Das Endergebnis liefert eine verschachtelte Liste von IDs und Ordnernamen, die den Abruf aller untergeordneten und untergeordneten Ordner mit beliebiger Tiefe ermöglicht.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe rekursiver Abfragen in MySQL alle untergeordneten Ordner in einer verschachtelten Hierarchie abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!