查询以在每月的每一天旁边显示结果

时间:2019-04-07 16:13:46

标签: php mysql

我有一个日历表设置,我已经根据匹配的天数加入了另一个表,但是希望显示整个月的剩余时间,即使没有匹配的情况,我试图建立一个当前月的图表以显示每天的进度。

我的查询是:

SELECT calTable.db_date, COUNT(DISTINCT tbl_data.id) as resultsCounts
FROM calendarTable as calTable
LEFT JOIN tbl_data as tbdata ON DATE(tbl_data.startDate) = DATE(calTable.db_date) 
WHERE calTable.db_date between '2019-04-01' AND '2019-04-30' 
GROUP BY calTable.db_date

我意识到,我加入另一个没有未来日期的表后,就会导致其余日期无法显示,我该怎么做才能显示当前月份的剩余时间,

array (size=3)
'db_date' => string '2019-04-07' (length=10)
'resultsCounts' => string '19' (length=2)

array (size=3)
'db_date' => string '2019-04-08' (length=10)
'resultsCounts' => string '0' (length=2)

array (size=3)
'db_date' => string '2019-04-09' (length=10)
'resultsCounts' => string '0' (length=2)

如果我想显示上个月的数据并且一天中没有任何结果,也一样,因为它仍将被包含为0等。

日历表如下所示:


id | db_date | year | month | day | quarter | week | day_name | month_name 

20190407 | 2019-04-07 | 2019 | 4 | 7 | 2 | 14 | sunday | April

道歉格式,不确定如何做。

1 个答案:

答案 0 :(得分:1)

如果您在calendarTable中具有有效日期,则该日期可能与范围内的所有日期有关,请尝试添加ifnull

SELECT calTable.db_date, ifnull(COUNT(DISTINCT tbdata.id), 0) as resultsCounts
FROM calendarTable as calTable
LEFT JOIN tbl_data as tbdata ON DATE(tbdata.startDate) = DATE(calTable.db_date) 
WHERE calTable.db_date between str_to_date('2019-04-01', '%Y-%m-%d') 
      AND tr_to_date('2019-04-30' , '%Y-%m-%d')
GROUP BY calTable.db_date