Php Mysql IFNULL在多选查询中仅工作一次

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

我正在尝试使用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个选择(为了节省空间,我只复制了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只会返回不同的行。工会立刻解决了我的问题。非常感谢。