gpt4 book ai didi

php - MySQL 获取全天网站统计信息

转载 作者:行者123 更新时间:2023-11-29 13:17:38 25 4
gpt4 key购买 nike

每次新访问者访问我的网站时,他们都会登录到数据库中。我可以使用以下查询来选择过去 7 天内特定日期的用户数量:

SELECT COUNT(*) AS Hits, DATE_FORMAT(Date, '%Y-%m-%d') AS HitDay FROM(stats) WHERE Date >= DATE_SUB(SYSDATE(), INTERVAL 7 DAY) GROUP BY DATE(Date) ORDER BY Date ASC   

问题是,作为项目的一部分,我必须在 VB 内的图表中绘制这些数据,如果在特定日期没有点击,则图表上的两个日期之间存在间隙。我想知道如果没有任何访问者,是否可以返回过去 7 个日期内的所有日期,并在 Hits 列上显示 0。间隔也可以更改,因此范围可以从 1 到 31。

也许这可以通过过程或函数来完成?任何想法都很棒,但我试图不填补 VB 中的空白。

最佳答案

您可以生成 7 天并使用如下统计数据将其左连接

SELECT COUNT(stats.date) AS Hits, DATE_FORMAT(days.Date, '%Y-%m-%d') AS HitDay 
FROM
(SELECT CURDATE() as date
UNION SELECT CURDATE() - INTERVAL 1 DAY
UNION SELECT CURDATE() - INTERVAL 2 DAY
UNION SELECT CURDATE() - INTERVAL 3 DAY
UNION SELECT CURDATE() - INTERVAL 4 DAY
UNION SELECT CURDATE() - INTERVAL 5 DAY
UNION SELECT CURDATE() - INTERVAL 6 DAY
)days
LEFT JOIN stats ON days.date = stats.date
GROUP BY DATE(days.Date) ORDER BY days.Date ASC

sqlFiddle

如果您的间隔发生变化,可以指定更多类似下面的内容(最多 128 天),然后只需更改条件 < 7无论您的间隔是多少

SELECT COUNT(stats.date) AS Hits, DATE_FORMAT(days.Date, '%Y-%m-%d') AS HitDay 
FROM
(SELECT CURDATE() - INTERVAL
(d1.value+d2.value+d3.value+d4.value+
d5.value+d6.value+d7.value) day as date
FROM (SELECT 0 as value UNION SELECT 1)d1,
(SELECT 0 as value UNION SELECT 2)d2,
(SELECT 0 as value UNION SELECT 4)d3,
(SELECT 0 as value UNION SELECT 8)d4,
(SELECT 0 as value UNION SELECT 16)d5,
(SELECT 0 as value UNION SELECT 32)d6,
(SELECT 0 as value UNION SELECT 64)d7
WHERE (d1.value+d2.value+d3.value+d4.value+
d5.value+d6.value+d7.value) < 7
)days
LEFT JOIN stats ON days.date = DATE(stats.date)
GROUP BY DATE(days.Date) ORDER BY days.Date ASC

sqlFiddle

关于php - MySQL 获取全天网站统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271056/

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