MYSQL Count, LEFT OUTER JOIN с нулевым счетом в простом случае

Учитывая две следующие примеры таблиц

ТАБЛИЦА 1: "пользователи"

ID    REGISTER_TIME    FIRSTNAME    LASTNAME    OPERATION_ID

1     1401789877       John         Doe         29
2     1401789879       Jack         Doe         29
3     1401789878       Pete         Doe         29

(Обратите внимание, что столбец register_time хранится как INT(11))

ТАБЛИЦА 2: 'calendar_days'

ID    DAY
1     2011-01-01
...   ....
n     2030-31-12

У меня есть следующий запрос MySQL, который отлично работает:

SELECT d.day, COUNT(d.day)
FROM calendar_days AS d
LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
WHERE l.`operation_id` = 29
GROUP BY d.day;

Но он не сохраняет дни, когда count равен нулю:

day;COUNT(d.day)

2014-05-07;1
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631

Что я хочу :

2014-05-07;1
**2014-05-08;0**
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631

Я чувствую, что я близок к истине, я пробовал любое соединение, возможное левое внешнее, правое внешнее, до сих пор нет пустых результатов.


person user3702578    schedule 03.06.2014    source источник


Ответы (1)


Ваше предложение where превращает ваше left join в inner join, поскольку вы используете условие для объединенной таблицы. Пытаться

SELECT d.day, COUNT(d.day)
FROM calendar_days AS d
LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
                           AND l.`operation_id` = 29
GROUP BY d.day;
person juergen d    schedule 03.06.2014
comment
Совершенно логично, я не знал, что можно добавить несколько условий для соединения. Спасибо ! - person user3702578; 03.06.2014