[MYSQL][PHP]SELECTでGROUP BYでまとめる
PHPからMySQLのデータをSELECTで取り出す際に、同じ値でグループ化したい場合に以下の様にSELECT文を書くんだけど・・・
SELECT * FROM テーブル名 GROUP BY カラム名
取得したいカラムのデータが数値で合計(sum)や平均(avg)を出すってのなら簡単なんだけど、文字列の場合はどうすれば良いのか少し迷ったのでメモ
id| name | mail
---------------------
0 | 織田信長 | nobunaga***@gmail.com
1 | 豊臣秀吉 | saru*@yahoo.co.jp
2 | 徳川家康 | matsujun*@outlook.jp
3 | 織田信長 | tenka@okehazama.org
4 | 上杉謙信 | shio*@okuru.net
5 | 伊達政宗 | dokugan@ryu.biz
というt_listというテーブルがあったとしよう。この時、nameでグループ化してメールアドレスを取得する場合、『織田信長』というレコードが2つあるので
SELECT * FROM t_list GROUP BY name
とSELECTしたら『織田信長』のメールアドレスは1つしか取得出来ない
なので、GROUP_CONCATを使う
SELECT id, name, GROUP_CONCAT(mail) as mail FROM t_list ORDER BY name
こうすると、織田信長のmailカラムはカンマ(,)区切りで取得する事が出来る
nobunaga***@gmail.com,tenka@okehazama.org
後は、PHPならexplodeなどを使ってカンマ(,)で分割してやればOK!
ただ・・・データにカンマ(,)が含まれてると面倒な事になるので、拒否するかデータベースに登録する時に¸とかに変更してやった方が良いかも
この記事が気に入ったらサポートをしてみませんか?