Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit rekursiven Abfragen effizient alle Unterverzeichnisse eines bestimmten Verzeichnisses in MySQL abrufen?
Rekursive Abfragen für verschachtelte Ordnerstrukturen in MySQL
Stellen Sie sich ein Szenario mit einer Tabelle vor, die eine hierarchische Ordnerstruktur speichert, wobei jeder Ordner eine ID hat , die ID des übergeordneten Ordners und einen Namen. Die Tabelle ist wie folgt aufgebaut:
folders_table ----------------------- id_folder id_folder_parent folder_name
Die Herausforderung besteht darin, alle Unterverzeichnisse eines bestimmten Verzeichnisses mit einer einzigen SELECT-Abfrage abzurufen.
Lösung: Überarbeitung der Datenbankstruktur
Ein Ansatz besteht darin, die Datenbankstruktur zu ändern, um rekursive Abfragen zu ermöglichen. Anstatt indirekte Beziehungen über die Spalte „id_folder_parent“ zu speichern, sollten Sie die folgende Struktur verwenden:
folders_table ----------------------- id_folder folder_path folder_name
In dieser aktualisierten Struktur speichert die Spalte „folder_path“ den vollständigen Pfad jedes Ordners in der Hierarchie, beginnend mit dem Stammverzeichnis. Dies ermöglicht ein effizientes Durchlaufen der Ordnerstruktur mithilfe der Rekursion.
Rekursive Abfrage
Sobald die Datenbankstruktur geändert wurde, kann die folgende rekursive Abfrage verwendet werden, um alle Unterverzeichnisse abzurufen eines bestimmten Verzeichnisses:
WITH RECURSIVE FolderTraversal AS ( SELECT id_folder, folder_path, folder_name FROM folders_table WHERE id_folder = <directory_id> UNION ALL SELECT t.id_folder, t.folder_path, t.folder_name FROM folders_table AS t JOIN FolderTraversal AS p ON t.folder_path LIKE CONCAT(p.folder_path, '%/') ) SELECT id_folder, folder_path, folder_name FROM FolderTraversal;
In der obigen Abfrage wird die Spalte „folder_path“ verwendet, um das zu definieren Rekursion. Es hängt den aktuellen Ordnerpfad iterativ an den Pfad des nächsten Ordners an und verbindet so die Baumzweige. Indem die Abfrage bei der angegebenen Verzeichnis-ID gestartet wird, durchläuft sie rekursiv den gesamten Unterbaum.
Das obige ist der detaillierte Inhalt vonWie kann ich mit rekursiven Abfragen effizient alle Unterverzeichnisse eines bestimmten Verzeichnisses in MySQL abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!