くろふねが出かけたらアゲるスレ

くろふねが出かけたときに書き込みます。質問等ありましたら気軽にコメント書いてってください。

MySQLってちょっと便利

今日は冷房強いまま寝てしまったため風邪引いて休んでしまったんですが、夕方くらいに治ったんでちょっくらMySQLを勉強(仕事とは全然関係ない)。ちょと便利な機能があることを知りました。

テーブルの構成とデータが

項目1 項目2 項目3
1 A
1 A
1 B
2 C
2 D


となっているとき、検索して

項目1 項目2 項目3
1 A
B

2 C
D


という感じで出力したい場合、単純なSQLでは1回で処理することが難しいため、


  1. まず項目1をGROUP BYで検索
  2. 項目1に該当する項目2をGROUP BYで検索し、行間を<br>タグで区切る
  3. 項目1に該当する項目3をGROUP BYで検索し、行間を<br>タグで区切る



という流れで処理しないといけないのですが、MySQLにはGROUP_CONCATという複数行をカンマ区切りで1行に結合する関数が存在します。

その関数はDISTINCTやソートも可能なので、SELECT句を以下のように書くと1つのSQLで簡単に処理できます。


項目1
, GROUP_CONCAT(DISTINCT 項目2 ORDER BY 項目2 SEPARATOR '<br>')
, GROUP_CONCAT(DISTINCT 項目3 ORDER BY 項目3 SEPARATOR '<br>')
※項目1に対しGROUP BYが必要


こんな感じで検索結果が返ってきます

項目1 項目2 項目3
1 A<br>B あ<br>い
2 C<br>D


くろふねが行ったところ」の「撮影場所検索」や「撮影日検索」でこんな感じのことが必要だったため、さっきちょっと直しました。

かなり早くなったみたいで万々歳です。






(´・ω・`)ランキングに参加していますが、気が向いたときだけ押してください。

ブログランキング・にほんブログ村へ
にほんブログ村