MySQL访客/命中计数器排序统计

时间:2013-07-19 20:00:46

标签: php mysql sql sorting

我正在建立一个访客&点击我的网站的计数器,当然访问者每天都有一个独特的ip,每次点击页面时都会点击!

我已经使数据库和系统插入并更新了一个表,我保存了统计数据!

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

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

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

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

然后我想要所有今天的热门歌曲和游客,所有昨天的热门歌曲和访客,所有当月的点击率和访客和最后的总点击量和访问者!

这是我想要获得的图像

我知道如何使用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`";

我真的不知道怎么做其余的,以及如何获得每个网址的总访问者。这就是我需要一些帮助以及如何将它们组合在一起所以我不为每个进程创建一个查询(尽管如果不可能,我可以每次都创建一个新查询)


如果有人可以帮助我,我真的很感激,即使只是有些事情!而且查询越少越好。 (虽然这无关紧要)

1 个答案:

答案 0 :(得分: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`