我正在尝试创建一个显示过去30天的图表。我有查询并且它正在运行,但是因为我们刚刚开始我们只有今天的日期开始,我想要做的是过去30天也返回日期,总数将为0。
无论如何使用MYSQL做到这一点? 我当前的质询。
SELECT COUNT(DISTINCT(sessionkey)) as total, stamp as day,
ROUND(UNIX_TIMESTAMP(stamp)/(60 * 60)) AS timekey
FROM analytics
WHERE stamp > date_sub(now(), interval 30 day)
GROUP BY timekey
答案 0 :(得分:0)
您可以在MySQL中执行此操作,但不建议这样做。
解决方案是:
填充临时表:
CREATE TEMPORARY TABLE last30days(
myday DATE);
在最后30天插入:
CREATE PROCEDURE last30DaysProc()
BEGIN
DECLARE v_i INT;
SET v_i=30;
WHILE(v_i>0) LOOP
INSERT INTO last30days(myday) VALUES (date_sub(NOW(), interval v_i days));
SET v_i=v_i-1;
END WHILE;
END;
CALL last30DaysProc();
然后将此临时表与您的表连接,并执行count:
SELECT
COUNT(DISTINCT(sessionkey)) as total,
a.myday as myday,
ROUND(UNIX_TIMESTAMP(stamp)/(60 * 60)) AS timekey
FROM last30days a
LEFT JOIN analytics b ON a.myday=b.stamp
WHERE myday > date_sub(now(), interval 30 day)
GROUP BY timekey;
我会在代码中执行此操作:在您绘制数据时,使用count = 0生成缺少日期可能会更短。
答案 1 :(得分:0)
我会在php网站上这样做,效率会更高。如果count小于30,则可以通过简单的foreach循环添加伪数据。