ホームページ > データベース > mysql チュートリアル > MySQL で階層型再帰クエリを作成するにはどうすればよいですか?

MySQL で階層型再帰クエリを作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-25 16:02:14
オリジナル
889 人が閲覧しました

How to Create Hierarchical Recursive Queries in MySQL?

mysql

に階層化された再帰クエリを作成します

階層構造を理解してください

MySQLに層状クエリを作成すると、階層構造がどのように構築されるかを理解する必要があります。次の例を考えてみましょう:

この表では、
id 名称 父ID
19 类别1 0
20 类别2 19
21 类别3 20
22 类别4 21
列は、指定されたカテゴリの親クラスのIDを表します。たとえば、カテゴリ2の 19は19であり、カテゴリ1のサブカテゴリであることを示しています。

parent_idmysql 8ソリューション:再帰的にparent_id

mysql 8以降のバージョンの場合、文法で再帰的なものを使用できます:

このクエリは、指定された父親IDのすべてのサブセートカテゴリを取得します(この例では19)。出力には、カテゴリ1(ID = 19)に属する直接または間接のすべてのカテゴリが含まれます。

<code class="language-sql">WITH RECURSIVE cte (id, name, parent_id) AS (
  SELECT id, name, parent_id
  FROM products
  WHERE parent_id = 19
  UNION ALL
  SELECT p.id, p.name, p.parent_id
  FROM products p
  INNER JOIN cte ON p.parent_id = cte.id
)
SELECT * FROM cte;</code>
ログイン後にコピー
mysql 5.xソリューション:内部組合変数または自己接続

古いmysqlバージョン(5.x)の場合、2つの代替方法があります。

Neilian変数:

このクエリは、MySQLの特定の関数を使用して、実行中に変数を割り当てて変更します。親ID(19)を使用した変数を初期化し、関数を使用して

を使用して子孫リストに表示されるかどうかを確認することにより、子孫のIDリストを徐々に構築できます。
<code class="language-sql">SELECT id, name, parent_id
FROM (SELECT * FROM products ORDER BY parent_id, id) products_sorted,
     (SELECT @pv := '19') initialisation
WHERE FIND_IN_SET(parent_id, @pv)
  AND LENGTH(@pv := CONCAT(@pv, ',', id));</code>
ログイン後にコピー

self -connection:@pvFIND_IN_SET parent_id このクエリは、自己接続の親ID(19)を使用して、階層構造を横断します。 列に従ってサブウォッチを親テーブルに接続することにより、親レベルのすべての子孫を再帰的に抽出できます。

以上がMySQL で階層型再帰クエリを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート