クロス集計(複数のカウントを取る)
クロス集計とか言っておきながらCOUNT()は使わない。
- place::場所テーブル
- id
- lat::緯度
- lng::経度
- name::名称
- comment::コメントテーブル
- id::
- id__place::関連するplaceテーブルのID
- body::コメント本文
- wannago_or_beenthere::w(行きたい) | b(行ったことがある)
placeテーブルから1レコード取得しつつ、『行きたいコメント』と『行ったことあるコメント』の数も取得する
SELECT place.*, SUM(CASE WHEN 'w' = comment.wannago_or_beenthere THEN 1 ELSE 0 END) AS _cnt_w_, SUM(CASE WHEN 'b' = comment.wannago_or_beenthere THEN 1 ELSE 0 END) AS _cnt_b_ FROM place, comment WHERE place.id = ? AND place.id = comment.place
- 注意点
_cnt_w_と_cnt_b_はマッチがなかった場合、0ではなくnullなので注意。
またその場合、結果セットの_cnt_w_・_cnt_b_フィールドを見ても!isset()となっている。なんでだろ。
あと該当レコードがなかった場合も、配列長1なので気をつけること。