menu
書いてる野郎
orebike@gmail.com
よくやりたいやつ。データ的には本質じゃない付加情報として欲しいんだけど、それ結合しちゃうとレコード増えてしまうし困ったなというやつ。
ここで MySQL には非常に便利な GROUP_CONCAT
という集計関数があってグループ化された複数レコードのフィールドを1個の値としてガッチャンコしてくれるのである
SELECT team_id, GROUP_CONCAT(name SEPARATOR ',') FROM hoge GROUP BY team_id
このようなこれでこのようなレコードが取れる
1 | tanaka,yamada,ito |
2 | takahashi,kitamura,yamamoto |
大体においてこのような付加情報はレコード数が少ない、しかも普通に使うときは ORマッパー を使って class にマッピングされることが多い。
つまり class 側でこのガッチャンコを分解して自前でマッピングしてやれば十分事足りるのである。
さらにこいつには便利な機能が備わっていて、
GROUP_CONCAT(DISTINCT name ORDER BY name ASC SEPARATOR ',')
このように、重複値の排除と順番指定もできるようになっている。
データベース操作の本質から外れる部分があるとは思うが便利すぎるので多用してしまいそうである。