ホームページ >データベース >mysql チュートリアル >MySQL で複数の子行を 1 つの親行に結合するにはどうすればよいですか?

MySQL で複数の子行を 1 つの親行に結合するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-03 01:04:11691ブラウズ

How to Combine Multiple Child Rows into a Single Parent Row in MySQL?

MySQL で複数の子行を 1 つの親行に結合する

ネストされたデータを持つ構造化テーブルを扱う場合、マージすると便利です複数の子行を 1 つの親行に統合して、より集約されたデータのビューを提供します。これが必要となる一般的なシナリオの 1 つは、指定された例で示されているような注文管理システムを使用する場合です。

2 つのテーブル、Ordered_Item と Ordered_Options について考えてみましょう。 Ordered_Item テーブルは注文された商品を表し、Ordered_Options テーブルには注文された各商品に関連付けられた追加の詳細またはオプションが含まれます。目標は、Ordered_Item テーブルの Items_Name 列と、Ordered_Options テーブルの対応するオプション値を組み合わせたクエリを、特定の順序でグループ化し、カンマで区切って出力することです。

1 つの効果的な解決策は、MySQL の GROUP_CONCAT を利用することです。複数の行の値を連結し、指定した列ごとにグループ化する関数。以下のクエリは、望ましい結果を達成します:

SELECT
  ordered_item.id AS `Id`,
  ordered_item.Item_Name AS `ItemName`,
  GROUP_CONCAT(Ordered_Options.Value) AS `Options`
FROM
  ordered_item
JOIN
  ordered_options
ON
  ordered_item.id = ordered_options.ordered_item_id
GROUP BY
  ordered_item.id

このクエリは次の出力を生成します:

Id  ItemName         Options
1   Pizza            Pepperoni,Extra Cheese
2   Stromboli        Extra Cheese

GROUP_CONCAT 関数は、オプション値が単一の文字列に連結されて保持されることを保証します。 Option_Number 列に基づくオプションの順序。この方法は非常に効率的であり、静的なソリ​​ューションやクエリの追加の複雑さを必要とせずに、多数のオプションを処理できます。

連結結果がデフォルトの最大長である 1024 文字を超える場合を処理するために、MySQL は以下を提供します。 group_concat_max_len 変数。以下に示すように、この変数をより高い値に設定すると、より大きな連結文字列に対応できるようになります:

SET SESSION group_concat_max_len = 8192;

以上がMySQL で複数の子行を 1 つの親行に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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