ホームページ >データベース >mysql チュートリアル >MySQL で再帰クエリを使用して、ネストされた階層内のすべての子孫フォルダーを取得するにはどうすればよいですか?

MySQL で再帰クエリを使用して、ネストされた階層内のすべての子孫フォルダーを取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 16:04:02502ブラウズ

How can I retrieve all descendant folders in a nested hierarchy using recursive queries in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。