Rekursiver Abruf von untergeordneten Ordnern in MySQL
Beim Arbeiten mit hierarchischen Datenstrukturen ist es notwendig, untergeordnete Elemente und deren untergeordnete Elemente abzurufen aus der Datenbank. Im Fall einer Tabelle, die Ordner darstellt, ist eine Abfrage erforderlich, die alle untergeordneten Ordner für einen bestimmten übergeordneten Ordner abrufen kann.
Stellen Sie sich das Szenario vor, in dem wir eine Ordnertabelle mit der folgenden Struktur haben:
CREATE TABLE IF NOT EXISTS `Folder` ( `idFolder` INT(11) NOT NULL AUTO_INCREMENT, `FolderName` VARCHAR(150) NOT NULL, `idFolderParent` INT(11) NULL, PRIMARY KEY (`idFolder`), CONSTRAINT `fk_1` FOREIGN KEY (`idFolderParent`) REFERENCES `Folder` (`idFolder`) );
Wir haben einen Beispieldatensatz für diese Tabelle:
idFolder , FolderName , idFolderParent 1 ADoc Null 2 ADoc1 1 3 ADoc2 2 4 ADoc3 3 5 ADoc4 4 6 ADoc5 5 7 ADoc6 4
Die Herausforderung
Bei einem gegebenen idFolder besteht das Ziel darin, eine einzelne Abfrage zu erstellen, die abruft alle untergeordneten Ordner sowie alle untergeordneten Ordner rekursiv. Zum Beispiel:
Die Lösung
Die bereitgestellte Lösung nutzt eine Kombination aus benutzerdefinierten MySQL-Variablen und einer Unterabfrage, um einen rekursiven Abruf zu erreichen:
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;
Erklärung
Die Abfrage nutzt die Funktion FIND_IN_SET() um zu prüfen, ob der idFolderParent der aktuellen Zeile im Wert der benutzerdefinierten Variablen @pv vorhanden ist. Wenn dies der Fall ist, wird der Wert an die Variable lv angehängt. Die Unterabfrage generiert mehrere Zeilen, von denen jede eine Ebene der rekursiven Suche darstellt.
Durch die Verwendung der Funktion GROUP_CONCAT() mit der SEPARATOR-Klausel werden die Ergebnisse jeder Zeile kombiniert und durch das angegebene Trennzeichen (in diesem Fall) getrennt , ein Komma). Das Endergebnis ist eine Zeichenfolge, die die verketteten untergeordneten Ordner enthält.
Diese Lösung bietet eine robuste Methode zum rekursiven Abrufen von untergeordneten und untergeordneten Ordnern, auch wenn die Reihenfolge der übergeordneten Ordner in der Datenbank möglicherweise nicht streng hierarchisch ist.
Das obige ist der detaillierte Inhalt vonWie implementiert man den rekursiven Ordnerabruf in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!