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