I am formalating a query to give the number of reports submitted over the last year ordered by date. I get the current year and month with php:
$year = date('Y') - 1; $month = date('m');
and execute the following query: SQL:
SELECT month(date_lm) AS `month` , count(*) AS `count` FROM `reports` WHERE (status = 'submitted') AND (date_lm > 2012-08) GROUP BY month(date_lm) ORDER BY month(date_lm) ASC
And because there has only been 1 submitted in the last year it gives me only 1 result…
| month | count | | 7 | 1 |
But I would like the result set to show:
| month | count | | 9 | 0 | | 10 | 0 | | 11 | 0 | | 12 | 0 | | 1 | 0 | | 2 | 0 | | 3 | 0 | | 4 | 0 | | 5 | 0 | | 6 | 0 | | 7 | 1 | | 8 | 0 |
Is that possible?
Advertisement
Answer
You should LEFT JOIN this table with 1..12 table. Something like this:
SELECT Months.id AS `month` , COUNT(`reports`.date_lm) AS `count` FROM ( SELECT 1 as ID UNION SELECT 2 as ID UNION SELECT 3 as ID UNION SELECT 4 as ID UNION SELECT 5 as ID UNION SELECT 6 as ID UNION SELECT 7 as ID UNION SELECT 8 as ID UNION SELECT 9 as ID UNION SELECT 10 as ID UNION SELECT 11 as ID UNION SELECT 12 as ID ) as Months LEFT JOIN `reports` on Months.id=month(`reports`.date_lm) AND (status = 'submitted') AND (date_lm > 2012-08) GROUP BY Months.id ORDER BY Months.id ASC