[MySQL]複数レコードを集約!!

タグ: | 投稿日: 投稿者:

あけましておめでとうございます。
takeです。

Web制作をしてる際、DBの複数レコードを1行に集約した結果を表示したい!!
って時がまれにあります。

View側でループし、複数レコードを1行に表示するように小細工してもいいのですが、
MySQLには「GROUP_CONCAT」という集約関数があります。

詳しくはここ

では、早速試してみましょう。

1.社員と部署の関係を持つテーブルを作成します。
20140108_01
作成した結果はこれ。
20140108_02
20140108_03
20140108_04

2.各テーブルにデータを設定します。
20140108_05

3.抽出した結果。
20140108_06

見てのとおり、john以外の人は複数の部署に所属しているので、複数レコード抽出されています。
この複数行の結果を、1行に集約する為に「GROUP_CONCAT」関数を使用します。

20140108_07

例にも示したとおり、「GROUP_CONCAT」内でorder by が使えます。
この他にも、group by 等も使えますので、かなり使い勝手はよいと思います。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook