Php Mysql IFNULL在多选查询中仅工作一次
我正在尝试使用MySQL查询构建一个月图形。我正在使用UNION命令检查单个查询中每个月表中有多少行。以下3个月的示例:Php Mysql IFNULL在多选查询中仅工作一次,php,mysql,union,ifnull,Php,Mysql,Union,Ifnull,我正在尝试使用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 UN
$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个选择(为了节省空间,我只复制了3个),每个月一个。某些月份将返回值,其他月份则不会(IFNULL应将其转换为“0”)。
我的最终产出(12个月)应如下所示:
// OUTPUT: 0,176,68,0,0,0,0,0,12,15,176,43,
// OUTPUT: 0,176,68,12,15,176,43,
但是。。。如果有多个SELECT不返回行,则查询不会向结果中添加另一个“0”。我的最终结果是这样的:
// OUTPUT: 0,176,68,0,0,0,0,0,12,15,176,43,
// OUTPUT: 0,176,68,12,15,176,43,
这就像IFNULL只执行一次,即使他出现在所有12个选择中
我做错什么了吗?有人能发现我代码中的错误吗
谢谢大家! 使用
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
行
发件人:
UNION的默认行为是从中删除重复的行
结果呢
使用
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
行
发件人:
UNION的默认行为是从中删除重复的行
结果呢
使用
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
行
发件人:
UNION的默认行为是从中删除重复的行
结果呢
使用
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
行
发件人:
UNION的默认行为是从中删除重复的行
结果呢
UNION ALL
,UNION
给出DISTINCT
结果UNION ALL
,UNION
给出DISTINCT
结果UNION ALL
结果UNION ALL
,UNION
给出DISTINCT
结果,非常简单。。。我不知道UNION只会返回不同的行。工会立刻解决了我的问题。谢谢。哦,真的很简单。。。我不知道UNION只会返回不同的行。工会立刻解决了我的问题。谢谢。哦,真的很简单。。。我不知道UNION只会返回不同的行。工会立刻解决了我的问题。谢谢。哦,真的很简单。。。我不知道UNION只会返回不同的行。工会立刻解决了我的问题。非常感谢。