ホームページ > データベース > mysql チュートリアル > 単一のクエリを使用してMySQL階層構造ですべての子供IDを取得する方法は?

単一のクエリを使用してMySQL階層構造ですべての子供IDを取得する方法は?

Barbara Streisand
リリース: 2025-01-25 16:12:09
オリジナル
831 人が閲覧しました

How to Retrieve All Child IDs in a MySQL Hierarchical Structure Using a Single Query?

MySQL 階層再帰クエリを作成する方法

質問

階層を持つ MySQL テーブルがあり、各レコードには ID、名前、親 ID があります。単一の MySQL クエリを使用して、指定された親 ID のすべての子 ID を取得したいとします。

答え

MySQL 8 の場合:

再帰構文で使用します:

<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 の場合:

インライン変数、パス 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>
ログイン後にコピー

パススタイル識別子:

階層情報 (パス) を含む ID 値を割り当てます:

<code>ID      | NAME
--------|--------
19       | category1
19/1     | category2
19/1/1   | category3
19/1/1/1 | category4</code>
ログイン後にコピー

次に、次のクエリを使用します:

<code class="language-sql">SELECT * FROM products WHERE ID LIKE '19/1/1/%'</code>
ログイン後にコピー

以上が単一のクエリを使用してMySQL階層構造ですべての子供IDを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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