Rekursive Abfrage zum Abrufen aller untergeordneten und untergeordneten Ordner in MySQL
Frage:
Wie Kann ich eine einzelne SQL-Abfrage entwerfen, um alle untergeordneten und untergeordneten Ordner für eine bestimmte übergeordnete Ordner-ID in einer hierarchischen Datenbank abzurufen?
Szenario:
Betrachten Sie einen Tabellenordner mit die folgende Struktur:
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`) );
Die Tabelle wird wie folgt gefüllt:
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 1 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | 4 |
6 | ADoc5 | 5 |
7 | ADoc6 | 4 |
Problemstellung:
Wir möchten eine Abfrage entwerfen das alle untergeordneten und untergeordneten Ordner für eine bestimmte übergeordnete Ordner-ID zurückgibt. Zum Beispiel:
Lösung:
Die folgende Abfrage verwendet eine rekursive Technik, um das gewünschte Ergebnis zu erzielen:
<code class="sql">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;</code>
Erklärung:
Das obige ist der detaillierte Inhalt vonWie rufe ich alle untergeordneten und untergeordneten Ordner in einer hierarchischen Datenbank mit einer einzigen SQL-Abfrage ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!