我在从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()
答案 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...)
,但应该没问题。