为了数据分析,我正在练习绘制各种统计数据的图表。但我无法找到在后端触发多个 mysql 查询的有效方法。
我正在尝试绘制期间与访客数量图表。 请注意:这里的期间是指周,月,3个月,6个月,1年,2年。 用户将从选择框中选择期间。 例如:当用户选择3周时,我需要每3周图表构建一次访客数量。
我的数据库包含两列:对于每个网站点击,它会记录:
(1)时间戳和
(2)用户ID 。
如果我为每个选择选项多次触发查询,那么性能会很差。那么,如何有效地进行?
UPD: 当用户选择每3个月的统计数据时:
然后我将mysql查询解雇为:
Select count(*) From stats_tab WHERE timestamp BETWEEN JAN AND MAR;
Select count(*) From stats_tab WHERE timestamp BETWEEN APR AND JUN;
Select count(*) From stats_tab WHERE timestamp BETWEEN JUL AND SEP;
............
每个查询返回的每个计数都是我的图表的y轴值
每年用户选择统计数据时: 然后我将mysql查询解雇为:
Select count(*) From stats_tab WHERE timestamp BETWEEN 2009 AND 2010;
Select count(*) From stats_tab WHERE timestamp BETWEEN 2010 AND 2011;
Select count(*) From stats_tab WHERE timestamp BETWEEN 2011 AND 2012;
............
答案 0 :(得分:1)
不要使用多个查询来命中数据库。通过适当应用GROUP BY
和WHERE
SELECT YEAR(timestamp) year, COUNT(*) total
FROM stats_tab
WHERE timestamp BETWEEN NOW() - INTERVAL 3 YEAR AND NOW()
GROUP BY YEAR(timestamp);
SELECT MONTH(timestamp) month, COUNT(*) total
FROM stats_tab
WHERE timestamp BETWEEN NOW() - INTERVAL 6 MONTH AND NOW()
GROUP BY MONTH(timestamp);
SELECT DAY(timestamp) day, COUNT(*) total
FROM stats_tab
WHERE timestamp BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
GROUP BY DAY(timestamp);
示例输出:
| YEAR | TOTAL | ---------------- | 2011 | 2 | | 2012 | 1 | | 2013 | 9 | | MONTH | TOTAL | ----------------- | 2 | 1 | | 3 | 2 | | 5 | 1 | | DAY | TOTAL | --------------- | 20 | 1 | | 21 | 1 | | 22 | 1 |
这是 SQLFiddle 演示