Mysql IFNULL работает только один раз в нескольких запросах SELECT

Я пытаюсь построить графику за месяц, используя запрос 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 …

Я делаю что-то неправильно? Кто-нибудь может обнаружить ошибку в моем коде или что-то?

Спасибо!

0

Решение

использование 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 состоит в том, что повторяющиеся строки удаляются из
результат.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]