目前我有一个系统,其中PHP脚本在加载页面时记录访问的一些信息(时间和“sid”)。
然后我使用:
SELECT *
FROM (
SELECT COUNT(*), time
FROM visit
WHERE sid = $sid
GROUP BY time
ORDER BY time DESC
LIMIT 14
) AS abc
ORDER BY time ASC
以相反的顺序获取过去两周的结果。
此查询的问题是,在没有访问的日子里,我没有得到结果:0, [time]
,而是没有。那些日子我怎么办才能得到零结果?它甚至可以在MySQL中使用,还是必须用PHP处理它?</ p>
任何帮助都非常感谢!
答案 0 :(得分:2)
您必须使用包含所有日期的第二个表(或使用如下所示的子查询)。因此,将表t
的子查询扩展到CURDATE()-13
过去14天。
SELECT COUNT(*),t.time FROM (
SELECT CURDATE() AS time
UNION
SELECT CURDATE()-1 AS time
UNION
SELECT CURDATE()-2 AS time
UNION
SELECT CURDATE()-3 AS time
UNION
SELECT CURDATE()-4 AS time
UNION
[...]
) AS t
LEFT JOIN visit AS v ON t.time=v.time AND v.sid=$sid
ORDER BY t.time DESC
答案 1 :(得分:1)
首先,如果我没记错,子查询中的ORDER是没用的。
如果我使用PostgreSQL,我会使用generate_series()和外连接来获取缺少日期的0。不幸的是MySQL has no such concept。我建议使用填充日期的临时表