2

我正在为我的网站建立一个访问者和点击计数器,当然访问者是每天唯一的 ip,并且每次请求页面时都会点击!

我已经创建了数据库和系统来插入和更新我保存统计信息的表!

我正在努力解决的是,如何对日期进行排序然后显示它。好吧,我知道我想如何显示它,但我需要正确排序,并且查询量最少

首先这是我的表结构,当前表名“testing_statistics”

url  - varchar(256)
ip   - int(11)
date - datetime

我不知道这是否是 100% 最好的方式,但这就是我目前存储它的方式,如果你们中的任何人有更好的想法,请随时告诉我。ip 被转换为 long 虽然 PHP,因此它可以存储为整数

然后我想要所有今天的点击量和访客,所有昨天的点击量和访客,所有当前月份的点击量和访客量,以及最后的总点击量和访客量!

这是我想要得到的图像

我知道如何使用 CSS 进行布局,它只是从数据库中排序/获取数据。


这就是我目前获得每个网址的总点击量的方式。

$query = "SELECT `url`, COUNT(*) as `hits` FROM `testing_statistics` GROUP BY `url`";

这就是我目前获得每个网址今天的点击量的方式。

$query = "SELECT `url`, COUNT(*) as `count2` FROM `testing_statistics` WHERE DATE(`date`) = CURDATE() GROUP BY `url`";

我真的不知道如何获得其余部分,以及如何获得每个 url 的总访问者。所以这就是我需要一些帮助以及如何将它们放在一起所以我不会为每个进程创建查询(虽然如果不可能,我可以忍受每次都创建一个新查询)


如果有人能帮助我,我真的很感激,即使只是一些事情!并且查询越少越好。(虽然真的无所谓)

4

1 回答 1

2

要获取总访问者,您可以使用count(distinct ip). 查询如下所示:

SELECT `url`, COUNT(*) as `hits`, count(distinct ip) as visitors
FROM `testing_statistics`
GROUP BY `url`

和:

SELECT `url`, COUNT(*) as `count2`, count(distinct ip) as visitors
FROM `testing_statistics`
WHERE DATE(`date`) = CURDATE()
GROUP BY `url`

实际上,您可以使用条件聚合在一个查询中完成这两项操作:

SELECT `url`, COUNT(*) as `hits`, count(distinct ip) as visitors,
       sum(case when DATE(`date`) = CURDATE() then 1 else 0 end) as TodayHits,
       count(distinct case when DATE(`date`) = CURDATE() then ip end) as TodayVisitors
FROM `testing_statistics`
GROUP BY `url`
于 2013-07-19T20:08:25.593 回答