我正在编写一些PHP / MySQL来检测过多的站点访问。虽然我觉得很简单,对于任何一个给定的IP地址,这个人在24小时内访问了多少次,所以他们是否超过了某个数字,也就是访问次数的最大值,但我所面对的是一些sql,它将判断出总体趋势--每个IP的访问次数都超过了这段时间内的阈值次数。请考虑以下简化的数据库表,希望能更清楚地解释。
VisidID VisitIP VisitDate
----------------------------------
1 n.n.n.01 (yesterday)
2 n.n.n.02 (today)
3 n.n.n.01 (today)
4 n.n.n.03 (today)
5 n.n.n.03 (today)
6 n.n.n.03 (today)
7 n.n.n.04 (today)
8 n.n.n.05 (today)
9 n.n.n.04 (today)
10 n.n.n.06 (today)
11 n.n.n.05 (today)
12 n.n.n.07 (today)
------------------------------------因此,假设我将允许的最大访问阈值设置为2(只是为了保持示例表的小),我从这个表查询中寻找的结果是'3‘,因为有三个IP地址(n.03、n.04和n.05),它们的访问都相当于或超过了2次访问的访问阈值。
我如何在MySQL查询中捕获它,运行它是一个快速、高效或繁琐的查询呢?
发布于 2015-02-17 18:37:01
使用HAVING子句,此查询将返回计数大于2的查询-
SELECT `VisitIP`, COUNT(`VisitIP`) AS `CountIP`
FROM `table`
GROUP BY `VisitIP`
HAVING `CountIP` > 2为了计算满足条件的总人数,你可以这样做-
SELECT COUNT(*) AS `TotalOverTwo` FROM
(SELECT `VisitIP`, COUNT(`VisitIP`) AS `CountIP`
FROM `table`
GROUP BY `VisitIP`
HAVING `CountIP` > 2
) `table`发布于 2015-02-17 18:33:38
只需写这个简单的查询,你的问题就会解决!
select count(`VisitIP`) as totalVisits from table group by(`VisitDate`) HAVING `totalVisits` > 2;https://stackoverflow.com/questions/28568466
复制相似问题