Как заполнить пустое значение, если в этот день нет записи с использованием группы MySQL

SELECT `Date`, SUM(Clicks) AS Clicks, DAY(LAST_DAY(NOW())) AS Monthdays FROM myTbl WHERE ( DATE BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND NOW() ) AND MoverID = 123 GROUP BY `Date` ASC 

Я не хочу использовать ПРОЦЕДУЮ следующим образом: http://stackoverflow.com/questions/7252460/mysql-group-by-and-fill-empty-rows

Я не хочу создавать целый день, содержащий таблицу следующим образом: http://stackoverflow.com/questions/5988179/mysql-group-by-date-how-to-return-results-when-no-rows

Я могу использовать SELECT @@global.time_zone, @@session.time_zone; в PHP и после того, как результат запроса MySQL отсутствует, я делаю PHP в том же часовом поясе, что и MySQL, и заполняю дату PHP. Но как я могу это сделать в MySQL?

Вы можете использовать трюк для создания виртуальной таблицы со всеми датами, которые вам нужны, с другой таблицей (замените aux любой таблицей в вашей БД с 31 рецензией, по крайней мере):

 SELECT CONVERT(@d := DATE_ADD(@d, INTERVAL 1 DAY), DATE) AS `d` FROM `aux`, (SELECT @d := DATE_SUB(CONVERT(DATE_FORMAT(NOW(), '%Y-%m-01'), DATETIME), INTERVAL 1 DAY)) `x` WHERE @d < DATE_SUB(NOW(), INTERVAL 1 DAY) LIMIT 31 

И затем присоединитесь к нему на столе:

 SELECT `aux`.`d` as `Date`, SUM(IFNULL(`Clicks`, 0))AS `Clicks`, DAY(LAST_DAY(NOW())) AS `Monthdays` FROM ( SELECT CONVERT(@d := DATE_ADD(@d, INTERVAL 1 DAY), DATE) AS `d` FROM `aux`, (SELECT @d := DATE_SUB(CONVERT(DATE_FORMAT(NOW(), '%Y-%m-01'), DATETIME), INTERVAL 1 DAY)) `x` WHERE @d < DATE_SUB(NOW(), INTERVAL 1 DAY) LIMIT 31 ) aux LEFT JOIN myTbl ON `Date` = `aux`.`d` GROUP BY `aux`.`d`