group_concat関数を使って複数レコードを1行にまとめる
テーブルリレーションした時など、
複数レコードが取得できるデータをカンマ区切りで
1レコードにまとめたいと思ったことはないでしょうか?
MySQLの場合、group_concat関数を使えば可能です
データ例
下記のようなデータを用意します。mysql> select * from animal; +----+---------+ | id | name | +----+---------+ | 1 | cat | | 2 | dog | | 3 | bird | | 4 | cat | +----+---------+
group_concatを使う
group_concat を使えばこんな感じで、カンマ区切りで1つのデータにまとめれます。ちなみに separator を「スペース」や「ハイフン」にすること可能です。
mysql> select group_concat(distinct name order by name desc separator ',') from animal; +--------------------------------------------------------------+ | group_concat(distinct name order by name desc separator ',') | +--------------------------------------------------------------+ | dog,cat,bird | +--------------------------------------------------------------+
区切りの件数を制御する
group_concat は limit をサポートしていません。なので、group_concat関数内で、limit を使ってもエラーが発生します。
まとめる件数を制御したい場合は、substring_index を組み合わせることで可能です
mysql> select substring_index(group_concat(distinct name order by name desc separator ','), ',', 2) as name from animal; +---------+ | name | +---------+ | dog,cat | +---------+
0 件のコメント:
コメントを投稿