ホームページ >データベース >mysql チュートリアル >MySQL で再帰クエリを使用して、ネストされた階層内のすべての子孫フォルダーを取得するにはどうすればよいですか?
ネストされたフォルダーの再帰クエリ
複数レベルのネストを持つすべての子フォルダーとサブ子フォルダーを取得することは、MySQL クエリにとって課題となります。さまざまなアプローチがありますが、この記事では効果的で包括的なソリューションに焦点を当てます。
特定の親からすべての子孫フォルダーを取得するには、単一のステートメント内でネストされた計算を可能にする再帰クエリを利用できます。このメソッドには反復プロセスが含まれており、各フォルダーの ID が次の反復のパラメーターとして使用され、サイクルごとに検索の深さが拡大されます。
次のシナリオを考えてみましょう。列 idFolder (auto) を持つ Folder という名前のデータベース テーブルがあるとします。 -増分された主キー)、FolderName、および idFolderParent (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 |
この構造により、ネストされたフォルダー階層を作成できます。たとえば、ADoc (idFolder=1) のすべての子フォルダーをクエリすると、その直接の子 (ADoc1、ADoc2) だけでなく、その下のすべての子孫フォルダー (ADoc3、ADoc4、ADoc5、ADoc6、ADoc7) も取得されることが期待されます。 .
次の SQL クエリは、再帰的反復を使用してこれを実現します。
<code class="sql">WITH RECURSIVE FolderHierarchy AS ( SELECT idFolder, FolderName, idFolderParent FROM Folder WHERE idFolder = 1 UNION ALL SELECT f.idFolder, f.FolderName, f.idFolderParent FROM FolderHierarchy AS h JOIN Folder AS f ON h.idFolderParent = f.idFolderParent ) SELECT idFolder, FolderName FROM FolderHierarchy;</code>
このクエリは、最初にルート フォルダー (ADoc) を選択し、次に再帰的に選択する FolderHierarchy という名前の共通テーブル式 (CTE) を使用します。子フォルダーを階層に結合します。子フォルダーがなくなるまでこのプロセスを継続し、すべての子孫を効果的に収集します。最終結果では、ID とフォルダー名のネストされたリストが提供され、任意の深さのすべての子フォルダーとサブ子フォルダーを取得できます。
以上がMySQL で再帰クエリを使用して、ネストされた階層内のすべての子孫フォルダーを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。