MySQL で複数の行を単一のカンマ区切りの行に結合するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-08 12:21:02
オリジナル
749 人が閲覧しました

How to Combine Multiple Rows into a Single Comma-Separated Row in MySQL?

MySQL: 複数の行を単一のカンマ区切りの行に変換する

MySQL データベース内では、次のような状況に遭遇することがあります。複数の行を 1 つの行に圧縮し、特定の列をカンマ区切り値として表します。これは、次のシナリオ例に示すように、GROUP_CONCAT 関数を利用することで実現できます。

シナリオ例:

2 つのテーブル DISH と DISH_HAS_DISHES を考えます。ここで、DISH は利用可能なすべての料理、および DISH_HAS_DISHES は DISH 間の 1 対多の関係を定義します。 DISH テーブルの構造は次のとおりです:

DISH:
dish_id   dish_name
1         dish_1
2         dish_2
3         dish_3
4         dish_4
ログイン後にコピー

DISH_HAS_DISHES テーブルは次のようになります:

DISH_HAS_DISHES:
meal_id   dish_id
1         2
1         3
1         4
ログイン後にコピー

目的:

私たちの目的各食事に対応する行があり、その料理 ID と名前がカンマ区切り値としてリストされる形式にデータを変換することです。望ましい出力は次のとおりです:

meal_id     dish_ids     dish_names
1           2,3,4        dish_2, dish_3, dish_4
ログイン後にコピー

解決策:

これを実現するには、いくつかの簡単な JOIN 操作とともに GROUP_CONCAT 関数を使用します:

SELECT m.meal_id, 
        GROUP_CONCAT(dish_id) AS dish_ids, 
        GROUP_CONCAT(dish_name) AS dish_names
FROM DISH_HAS_DISHES m JOIN DISH d ON (m.dish_id = d.dish_id)
GROUP BY meal_id
ログイン後にコピー

このクエリでは:

  • まず、DISH_HAS_DISHES テーブル (m) と DISH テーブル (d) を、dish_id 列で結合します。
  • SELECT ステートメント内では、GROUP_CONCAT を使用して、dish_id 列とdish_name 列の複数の値をマージします。
  • 最後に、結果を食事 ID でグループ化し、食事ごとに 1 つの行を取得します。

次のコマンドを実行します。このクエリを実行すると、目的の出力が得られます。各行は、食事、その料理 ID、および対応する料理名を表し、すべてカンマ区切りの値で表されます。この手法は、表形式のデータを操作し、複数の行にわたる情報を統合する場合に特に役立ちます。

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

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