我有这个查询,可以获得这两个日期之间的所有注册数据
SELECT date as date_month, status FROM tbl_reports WHERE status != 0 AND (date BETWEEN '2017-01-01' AND '2017-12-31') GROUP BY MONTH(date)
结果
date_month
2017-04-19
2017-05-24
2017-06-26
2017-07-01
但是即使其他月份没有注册的输入,我怎么能得到结果
想要结果
Date_month
2017-01-01
2017-02-01
2017-03-01 - it will give this value if there is no such data in this month
2017-04-19 - i will get the input date from database
'' '' ''
2017-12-31
有可能吗?或者我需要一些PHP代码来操纵这些数据? 提前谢谢你回答我的问题.. :)
答案 0 :(得分:1)
创建一个名为datehelper的额外表。提供2列:年和月。并填写年份:2017年至2027年和本月的1/12。
SELECT
datehelper.year,
datehelper.month,
r.status
FROM datehelper
LEFT JOIN tbl_reports r ON MONTH(r.date) = datehelper.month
AND YEAR(r.date) = datehelper.year AND status != 0
WHERE (datehelper.year = '2017')
ORDER BY datehelper.year, datehelper.month
如果某个月内有更多记录,我看到你会在左连接部分得到重复。 你期望什么样的地位?我们认为有状态0(排除)状态= 1和状态= 2
的记录datehelper:
year month
2017 1
2017 2
2017 3
2017 4
...
2017 11
2017 12
2018 1
...