我正在尝试获取按月分组的最近12个月约会中的COUNT个,以输出到图表中。以下工作正常,但是如果每个月没有结果,我需要将其返回0。
$query = "SELECT COUNT(id) as total_month FROM appointments WHERE created >= DATE(NOW()) - INTERVAL 365 DAY GROUP BY Month(created)";
$query = $mysqli->real_escape_string($query);
if($result = $mysqli->query($query)){
while($row = $result->fetch_array())
{
$month_total_appointments .= $row['total_month'].',';
}
}
echo $month_total_appointments;
================================================================
Simple table structure and example for appointments Table
id customer_name created
1 John 2020-05-01 08:00:00 <= stored as datetime
2 Mike 2020-04-01 09:00:00
3 Steve 2020-02-01 10:00:00
Output would be 0,0,0,0,0,0,0,0,1,0,1,1
======================================================
当前输出为:1,1,1
我已经阅读了一些使用月份表和左联接的信息,但是我尝试过的所有方法似乎都无法正常工作。谁能帮忙吗?
对于不存在的行,您不会得到零。分组组合了符合特定条件的行,但不能一无是处。
这就是为什么通常在结果中包括分组条件的原因:
SELECT COUNT(id), MONTH(created) AS created_month FROM appointments WHERE created >= DATE(NOW()) - INTERVAL 365 DAY GROUP BY created_month
然后,您可以在应用程序代码中将其扩展为填写缺少的值。另一种选择是您需要一个完整填充的列表,列出
JOIN
对应的所有可能日期。
请紧记MONTH()
内容将在2020年1月和2021年1月组合在一起。您可能需要对此进行分解:
SELECT COUNT(id), YEAR(created) AS created_year, MONTH(created) AS created_month
FROM appointments
WHERE created >= DATE(NOW()) - INTERVAL 365 DAY
GROUP BY created_year, created_month