Mysqlで複数行の結果を一行で出す方法
複数の値を1行にまとめて返す、group_concat関数を使用します。
PHPの関数で言うと、implodeと同じ機能になります。
以下2つのテーブルがあります。
Aテーブル
a_id | name |
1 | 山田 |
2 | 鈴木 |
Bテーブル
b_id | a_id | hobby |
1 | 1 | 映画 |
2 | 1 | お酒 |
3 | 2 | 音楽 |
4 | 2 | ショッピング |
5 | 1 | 旅行 |
6 | 2 | ドライブ |
7 | 1 | カラオケ |
8 | 2 | サッカー |
9 | 2 | 温泉 |
group_concatを使用してSQLを作成します。
1 2 3 4 5 6 7 8 9 | SELECT A.a_id, GROUP_CONCAT(B.hobby) as hobby FROM A,B WHERE A.a_id = B.a_id GROUP BY A.a_id |
実行結果はこのようになりました。
a_id | hobby |
1 | 映画,お酒,旅行,カラオケ |
2 | 音楽,ショッピング,ドライブ,サッカー,温泉 |
他にもこんなことができます。
区切り文字を指定できます。(指定しない場合、カンマ区切りになります。)
1 | GROUP_CONCAT(B.hobby separator '/') |
昇順・降順に並べられます。
1 | GROUP_CONCAT(B.hobby order by B.b_id) |
Author Profile
スターフィールド編集部
SHARE