gpt4 book ai didi

php - 有效触发多个查询

转载 作者:行者123 更新时间:2023-11-29 13:43:27 24 4
gpt4 key购买 nike

出于数据分析的目的,我正在练习根据各种统计数据绘制图表。但我无法找出在后端触发多个 mysql 查询的有效方法。

我正在尝试绘制时间段访问者数量图表。请注意:这里的期间是指周、月、3个月、6个月、1年、2年。用户将从选择框中选择周期。例如:当用户选择 3 周时,我需要构建每 3 周的访客数量图表。 enter image description here

我的数据库包含两列:对于每个网站点击,它记录:

(1) 时间戳

(2)用户 ID

如果我为每个选择选项多次触发查询,那么性能会很差。那么,如何有效地做到这一点?

更新:当用户选择每 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;
............

最佳答案

不要使用多个查询来访问数据库。通过适当应用 GROUP BYWHERE

的一个查询获取所有值
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 演示

关于php - 有效触发多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17779694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com