如何计算数据库中的(重复次数)数量

How to count the number of (number of duplicates) in a database

我正在写一些 PHP / MySQL 来检测过多的站点访问。虽然我发现对于任何给定的 IP 地址,检测该人在 24 小时内访问了多少次,以及他们是否超过了访问最大值的某个次数,我发现它很简单,但我正在努力的是 sql 这将挑选出整体趋势 - 在此期间有多少 IP 的每个访问次数超过阈值次数。请考虑以下简化的数据库table,我希望它能解释得更清楚。

 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(只是为了让我的示例 table 变小)我正在寻找的结果是 table查询为'3',因为有三个IP地址(n.n.n.03、n.n.n.04和n.n.n.05)今天的访问量均等于或超过访问阈值2 次访问。

我如何在 MySQL 查询中捕获它,它是对 运行 的快速高效还是繁琐的查询?

只需编写这个简单的查询,您的问题就会得到解决!

select count(`VisitIP`) as totalVisits from table group by(`VisitDate`) HAVING `totalVisits` > 2;

使用 HAVING 子句,此查询将 return 那些计数高于 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`