今日は冷房強いまま寝てしまったため風邪引いて休んでしまったんですが、夕方くらいに治ったんでちょっくら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回で処理することが難しいため、
|
という流れで処理しないといけないのですが、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 | う |
「くろふねが行ったところ」の「撮影場所検索」や「撮影日検索」でこんな感じのことが必要だったため、さっきちょっと直しました。
かなり早くなったみたいで万々歳です。