php - 获取一年中每个月的总计,包括没有结果的月份

标签 php mysql

我想回显每月创建的发票总数。

下面的代码到目前为止有效,但如果一个月内没有结果,我需要 0。

$sql = "SELECT MONTH( invoice_date ) AS MONTH, SUM(`invoice`.`total`) as total
    FROM `invoices`
    WHERE YEAR(invoice_date) = '2019'
    GROUP BY MONTH(invoice_date)";
$result = mysqli_query($con,$sql);
while($data = mysqli_fetch_array($result))
{
    $total = $data['total'];
    $month = $data['month'];
}

我想要的是这样的:

Jan 500
Feb 300
Mar 0
Apr 500
etc...

我得到的是这个

一月 500 二月 300 四月 500

...因为我的数据库中没有包含 Mar 的条目。

如果我每个月循环执行查询,它工作正常,但我知道我不应该以这种方式使用它,并且有更好的方法!?

最佳答案

使用 UNION ALL 创建一个查询,返回所有月份数字 1-12 和 LEFT JOIN 到您的查询:

SELECT m.MONTH, COALESCE(t.total, 0)
FROM (
  SELECT 1 AS MONTH UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL 
  SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL
  SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
) AS m LEFT JOIN (
  SELECT MONTH( invoice_date ) AS MONTH, SUM(`invoice`.`total`) as total
  FROM `invoices`
  WHERE YEAR(invoice_date) = '2019'
  GROUP BY MONTH(invoice_date)
) AS t ON t.MONTH = m.MONTH

关于php - 获取一年中每个月的总计,包括没有结果的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118473/

相关文章:

php - 使用post meta从wordpress中的自定义表中获取值

php - 有没有办法像在 QuickForm 中使用 addFormRule 一样在 QuickForm2 中创建自定义规则

php - 通过发布的数组过滤数据?

php - 从字符串中选择Max及其唯一性

php - 可以有一个有两个名字的 php 函数吗?

php - Facebook 标签高度滚动条

php - 如何从 .JS 文件中重置一次性 PHP 表单 token 以防止表单泛滥?

mysql - 在加入冗余和得到

mysql - SQL - 减少时间请求

mysql - 手动自动递增