【问题标题】:MySQL Visitor/Hit Counter Sorting StatisticsMySQL 访问者/命中计数器排序统计
【发布时间】:2013-07-19 05:42:16
【问题描述】:

我正在为我的网站建立一个访问者和点击计数器,当然访问者是每天唯一的 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`";

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


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

【问题讨论】:

  • 您的查询看起来不错。哪个部分不工作?

标签: php mysql sql sorting


【解决方案1】:

要获取总访问者,您可以使用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`

【讨论】:

  • 这很酷,但是我该如何处理昨天和当前月份?如果你当然知道的话。
  • @ChristianVallentin 。 . .同样的想法。只需添加定义昨天和上个月的变量。提示:使用adddate()interval
猜你喜欢
  • 2015-01-06
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多