【问题标题】:mysqli COUNT with WHERE and GROUP BYmysqli COUNT 与 WHERE 和 GROUP BY
【发布时间】:2018-02-25 23:30:36
【问题描述】:

我正在尝试获取特定日期的记录数量。问题是当日期没有记录时,它不会显示日期。

$asksome= mysqli_query("
    SELECT COUNT(worker_id) AS amount, problem.datter AS datum
    FROM problem 
    WHERE worker_id = $idmed
    GROUP BY datter"
);

结构如下:

worker_id | datter    | note
1         |2018-02-25 | 
1         |2018-02-26 | 
3         |2018-02-25 |

这是我正在使用的查询。我希望查询显示日期,即使 COUNT 为 0。我的意思是我希望结果是这样的:

count result | date
0            | 2018-02-24
2            | 2018-02-25
1            | 2018-02-26
0            | 2018-02-27

- - 对于那些发现这篇文章却不知道该怎么做的人:我通过制作另一个表来解决我的问题,该表只包含我想要检查的特定日期。 我使用了以下查询:

SELECT weeks.week_id AS datum, COUNT(problem.datter) AS amount
    FROM weeks
    LEFT JOIN problem ON problem.datter = weeks.week_id
    GROUP BY weeks.week_id

【问题讨论】:

  • 尝试将您的数据库结构放入问题表,以便提供更清晰的帮助。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db->prepare("…") 过程化接口是 PHP 4 时代引入 mysqli API 时的产物,不应在新代码中使用。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 在你的例子中,如果你想在count = 0时显示日期,那么如果worker_id = 2,日期是什么?
  • 是的 anonyXmous,这就是我想要完成的目标

标签: mysql group-by count


【解决方案1】:

当count为0时,你应该明确sql如何处理count。一般情况下,当使用SQL的SUM()COUNT()以及GROUP BY语句时,永远不会输出0。那是因为,当您的计数为 0 的记录不存在时,GROUP BY 子句没有可分组的内容。

为此,您可以使用 COALESCE 表达式。

您可以在此处查看其文档:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql

所以在你的例子中,sql查询应该是:

SELECT COALESCE (SELECT COUNT(worker_id) AS amount, problem.datter AS datum
FROM problem 
WHERE worker_id = $idmed
GROUP BY datter"), 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多