如何在两个日期之间获得所有月份

时间:2017-07-03 01:51:03

标签: php mysql

我有这个查询,可以获得这两个日期之间的所有注册数据

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代码来操纵这些数据? 提前谢谢你回答我的问题.. :)

1 个答案:

答案 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
    ...