MySQL のすべての子フォルダーとサブ子フォルダーを取得するための再帰クエリ
質問:
方法階層データベース内の特定の親フォルダー ID のすべての子フォルダーとサブ子フォルダーを取得する単一の SQL クエリを設計できますか?
シナリオ:
次のようなテーブル フォルダーを考えます。次の構造:
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`) );
テーブルは次のように設定されます:
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 1 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | 4 |
6 | ADoc5 | 5 |
7 | ADoc6 | 4 |
問題ステートメント:
クエリを設計したいと考えていますこれは、指定された親フォルダー ID のすべての子フォルダーとサブ子フォルダーを返します。例:
解決策:
次のクエリは、再帰的手法を使用して目的の結果を実現します。
<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>
説明:
以上が単一の SQL クエリを使用して階層データベース内のすべての子フォルダーとサブ子フォルダーを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。