Heim  >  Artikel  >  Datenbank  >  Wie kann ich mithilfe rekursiver Abfragen in MySQL alle untergeordneten Ordner in einer verschachtelten Hierarchie abrufen?

Wie kann ich mithilfe rekursiver Abfragen in MySQL alle untergeordneten Ordner in einer verschachtelten Hierarchie abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 16:04:02424Durchsuche

How can I retrieve all descendant folders in a nested hierarchy using recursive queries in MySQL?

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!

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