MySQL で複数の子行を 1 つの行に連結する
リレーショナル データベースを使用する場合、多くの場合、関連する複数のデータを結合する必要があります。行を 1 つの行にまとめます。このタスクは、MySQL の GROUP_CONCAT 関数を使用して実行できます。
問題ステートメント:
2 つのテーブル、Ordered_Item と Ordered_Options について考えます。 Ordered_Item テーブルには注文された商品が格納され、Ordered_Options テーブルには注文された各商品に関連付けられたオプションが記録されます。目標は、オプションを個別の列として含めて、注文された商品ごとに 1 行を出力するクエリを作成することです。
解決策:
次のクエリは行を結合します。 GROUP_CONCAT 関数を使用して、Ordered_Item テーブルと Ordered_Options テーブルから取得します。
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;
このクエリでは、 GROUP_CONCAT 関数を使用して、Ordered_Options テーブルの Value 列の値をカンマで区切って連結します。連結された値は、出力のオプション列に割り当てられます。
出力:
クエリの出力は次のようになります:
| Id | ItemName | Options | | --- | -------- | ------- | | 1 | Pizza | Pepperoni,Extra Cheese | | 2 | Stromboli | Extra Cheese |
注:
順序の潜在的な違いに対応するためオプションの場合は、GROUP_CONCAT を使用して値を連結する前に、CASE ステートメントを使用して Option_Number で値を並べ替えることを検討してください。
以上がMySQL で複数の子行を 1 つの親行に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。