hawkmaster: Abfrage aller Verzeichnisse mit Unterverzeichnissen?

Hallo zusammen,

In einer Tabelle "directory" stehen Verzeichnissnamen und Pfade drin.
Der Aufbau ist wie folgt:
DirectoryName,DirectoryPath,DirectoryID,ParentID
----------------------------------------------------
TestDir,      C:\temp      , 1,           0
Köln          C:\adad       , 20           1
Bochum        D:\temp,       ,30,          1
Köln-Mitte     adaa,          35 ,         20
Köln-Süd      sdsd,           37,          20

Unterhalb "TestDir" liegt also das Verzeichnis Köln und Bochum. Unterhalb Köln gibt es noch die Unterverzeichnisse Köln-Mitte und Köln-Süd
Als ParentID wird immer die übergeordnete DirectoryID genommen.

Mit einer reinen PHP Lösung und Schleifen bekomme ich alle Directories ausgelistet.

Ist es wohl möglich so etwas auch mit "reinem " SQL zu machen?
Mit einem Subselect bekomme ich eine Ebene hin

SELECT DirectoryID,Directoryname FROM directory WHERE ParentID IN (
SELECT DirectoryID FROM directory WHERE DirectoryName = 'TestDir')

Aber wie gehts dann weiter?
Kann man das überhaupt mit einer SQL Abfrage lösen das also ausgehend vom Wurzelverzeichnis mit der ParentID 0 alle Unterverzeichnisse gelistet werden?

vielen Dank

vielen Dank und viele Grüße
hawk

  1. Hallo,

    Kann man das überhaupt mit einer SQL Abfrage lösen das also ausgehend vom Wurzelverzeichnis mit der ParentID 0 alle Unterverzeichnisse gelistet werden?

    Wenn Du eine Oracle-DB benutzt, gibt es dafür eigene Befehle - ist aber kein SQL-Standard und daher vermutlich in den meisten anderen DBS nicht vorhanden.

    Ansonsten kann ich Dir noch Mananging Hierarhcical Data in MySQL ans Herz legen, hier wird ein alternatives Konzept zum Verwalten von hierarchischen Daten vorgestellt.
    Da müsstest Du allerdings Deine Tabellenstruktur umstricken, weiß nicht, ob das eine Option ist.

    Ansonsten hilft wohl nur ein "Durchhangeln" mittels PHP bzw. Stored Procedures.

    Hope that helps,

    Viele Grüße,
    Jörg

    1. Hallo Jörg,
      vielen Dank für deine Hilfe.

      Ansonsten hilft wohl nur ein "Durchhangeln" mittels PHP bzw. Stored Procedures.

      ja so ähnlich habe ich es auch gemacht, mit einer rekursiven Funktion.
      Ich dachte mir fast das es mit reinen MySQL Bordmitteln nicht funktioniert.

      vielen Dank und viele Grüße
      hawk

      1. Hi!

        Ich dachte mir fast das es mit reinen MySQL Bordmitteln nicht funktioniert.

        Wenn du deine Struktur auf Nested Sets umstellst, geht es wieder mit DBMS-Bordmitteln. (Das Prinzip ist nicht auf MySQL beschränkt.) Nested Sets sind aber relativ aufwendig beim Ändern beim Hinzufügen und Löschen von Elementen, weil alle größeren L-R-Werte neu durchnummeriert werden müssen.

        Lo!