Php 使用MySQL group by在当天没有记录时如何填充空值
我不想使用这样的过程: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-rowsPhp 使用MySQL group by在当天没有记录时如何填充空值,php,mysql,Php,Mysql,我不想使用这样的过程: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_zo
我可以使用SELECT@@global.time_zone、@@session.time_zone;在PHP中,在MySQL查询结果出来后,我将PHP设置为与MySQL相同的时区,并用PHP填充日期。但这是一种我可以用MySQL方式实现的方法吗?您可以使用一种技巧生成虚拟表,其中包含另一个表所需的所有日期,将aux替换为数据库中至少记录了31个数据的任何表:
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
然后在上面加入您的表格:
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
为什么你要排除最好的方法?@pala_uu我不想要最好的方法,我拒绝的两种方法在我的情况下是不允许的。为什么他们是不允许的?您还建议如何为当前数据中不存在的日期创建数据点?
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`