如何计算数据库中的(重复次数)数量
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`
我正在写一些 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`