计算MySQL中的平均每日访问者数

时间:2013-04-12 12:24:10

标签: php mysql

我在从MySQL数据库计算平均每日访问者时遇到了一些问题。我有一个自动填充0或1的列,具体取决于访问者是真正的访问者还是机器人。 我的查询看起来像这样

SELECT
   COUNT( * ) / COUNT( DATEDIFF( NOW( ) , 
   SELECT * 
    FROM mw_visitors
    WHERE bot = 0
    ORDER BY ID ASC 
   LIMIT 1 ) )
FROM mw_visitors
WHERE bot = 0

但它不起作用。我的PHPMyAdmin告诉我,我的语法在“SELECT * FROM mw_visitors where bot = 0 ORDER ..”中出现错误。我在网上搜索过,但没找到正确的东西。

编辑:结构http://pastebin.com/dm4Hjukr 获得真正的人类访问者:

SELECT COUNT(DISTINCT `ip`) AS `visits`
FROM `mw_visitors` WHERE `bot` = 0 AND `time` BETWEEN
(SELECT `time` FROM `mw_visitors` WHERE `bot` = 0 ORDER BY `ID` ASC LIMIT 1) AND NOW()

2 个答案:

答案 0 :(得分:1)

了解你的表格如何看起来肯定会有很多帮助,但即使没有这个,你为什么不以更简单的方式对查询进行建模?

如果我理解正确,您希望获得访问您网站的REAL访客数量,因此您需要过滤掉任何机器人。

这样的查询建模是不是更容易?

SELECT COUNT(`visitor_id`) AS `visits` FROM `mw_visitors` WHERE `bot` = 0 AND `date` BETWEEN ? AND ?;

(将这两个问号标记为您要检查访问者点击的日期区域)。

答案 1 :(得分:0)

好的,现在我看到了你的桌子结构。在这种情况下,您要查找的查询应为:

SELECT COUNT(DISTINCT(`ip`)) / (SELECT ABS(DATEDIFF(NOW(),(SELECT `time` FROM `mw_visitors` ORDER BY `time` ASC LIMIT 1)))) AS `visits` FROM `mw_visitors` WHERE `bot` = 0 AND `time` BETWEEN NOW() AND (SELECT `time` FROM `mw_visitors` ORDER BY `time` ASC LIMIT 1);

我没有检查过最后一个(SELECT...),但应该没问题。