获得按月分组的最近12个月的数据,即使0

问题描述 投票:0回答:1

我正在尝试获取按月分组的最近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

我已经阅读了一些使用月份表和左联接的信息,但是我尝试过的所有方法似乎都无法正常工作。谁能帮忙吗?

php mysqli group-by left-join
1个回答
0
投票

对于不存在的行,您不会得到零。分组组合了符合特定条件的行,但不能一无是处。

这就是为什么通常在结果中包括分组条件的原因:

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
    
© www.soinside.com 2019 - 2024. All rights reserved.