データを含むいくつかのテーブルがあり、次の形式でピボットのようなテーブルを生成しようとしています:
エリア | タイプ | 2013-08-25 | 2013-08-26 | 2013-08-27 など. 南 | 南 | 赤 | 赤 | 5 | 2 | 9 北 | 北 | ブルー | ブルー | 3 | 0 | 7
現在、これを生成するために、PHP を使用して各日付をループし、指定された開始日と終了日に基づいて各日付の sum(if ステートメントを生成しています。
以前にクエリを実行して日付ごとにグループ化し、PHP で組み立てることができることはわかっていますが、SQL ソリューションはそれよりも簡単に思えます。
これは私がやろうとしていることを達成するための最良の方法ですか、それとも私が見逃している別の簡単な方法はありますか?
クエリの例:
SELECT
iw.display_name as Area,
iet.type as 'Type',
sum(if(date(iac.created_at) = '2013-08-25',1,0)) as '2013-08-25',
sum(if(date(iac.created_at) = '2013-08-26',1,0)) as '2013-08-26',
sum(if(date(iac.created_at) = '2013-08-27',1,0)) as '2013-08-27',
sum(if(date(iac.created_at) = '2013-08-28',1,0)) as '2013-08-28',
sum(if(date(iac.created_at) = '2013-08-29',1,0)) as '2013-08-29',
sum(if(date(iac.created_at) = '2013-08-30',1,0)) as '2013-08-30',
sum(if(date(iac.created_at) = '2013-08-31',1,0)) as '2013-08-31',
count(iac.id) as total
FROM iac
JOIN ioc on ioc.id = iac.ioc_id
JOIN iet on iet.id = ioc.iet_id
JOIN iw on iw.id = iac.iw_id
WHERE date(iac.created_at) between '2013-08-25' and '2013-08-31'
GROUP BY iw.id, iet.id
ORDER BY iw.display_name, iet.type