Как посчитать количество (количество дубликатов) в базе данных

Я пишу несколько 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.n.03, n.n.n.04 и n.n.n.05), чьи посещения сегодня равнялись или превышали порог посещений в 2 посещения.

Как бы мне это зафиксировать в запросе MySQL, и будет ли это быстрый и эффективный или громоздкий запрос для выполнения?

0

Решение

С использованием 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`
4

Другие решения

просто напишите этот простой запрос и ваша проблема будет решена!

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

По вопросам рекламы [email protected]