gpt4 book ai didi

php - Mysql IFNULL 在多个 SELECT 查询中只工作一次

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:03 25 4
gpt4 key购买 nike

我正在尝试使用 MySQL 查询构建月份图形。我正在使用 UNION 命令在单个查询中检查每个月表中有多少行。以下为 3 个月的示例:

$query =
"SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 1), 0) AS total UNION
SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 2), 0) AS total UNION
SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 3), 0) AS total";

$stats_query = mysqli_query ($db_connection, $query);

$result = "";
while ($row = mysqli_fetch_assoc($stats_query)) {
$result .= $row['total'].",";
}
echo ($result);

// OUTPUT: 0,176,68,

如您所见,我告诉 mysql 返回“0”,以防该月没有行(一月就是这种情况)。

该查询中共有 12 个 SELECTS(我只复制了 3 个以节省空间),每个月一个。有些月份会返回一个值,有些则不会(然后 IFNULL 应将其转换为“0”)。对于所有 12 个月,我的最终输出应该如下所示:

// OUTPUT: 0,176,68,0,0,0,0,0,12,15,176,43,

但是...如果有多个 SELECT 不返回任何行,则查询不会向结果添加另一个“0”。我的最终结果是这样的:

// OUTPUT: 0,176,68,12,15,176,43,

好像IFNULL只执行了一次,即使他出现在所有12个SELECTS中...

我做错了什么吗?任何人都可以发现我的代码中的错误或其他什么吗?

谢谢!

最佳答案

使用 UNION ALL 而不是 UNION 来获取所有结果:

 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 1), 0) AS total UNION ALL
SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 2), 0) AS total UNION ALL
SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 3), 0) AS total

UNION 仅返回 DISTINCT 行。

来自 doc :

The default behavior for UNION is that duplicate rows are removed from the result.

关于php - Mysql IFNULL 在多个 SELECT 查询中只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com