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




