par
zeus » 08 déc. 2008, 11:13
Alors, le principe de base est le suivant :
"Pour chaque minute et pour chaque IP, je veux le nombre de requête présente dans ma table."
Le principe est donc de
grouper par date (jusqu'a la minute) et par IP, puis de
compter le nombre de ligne.
Le début de ta requête est donc semblable à ceci :
Code : Tout sélectionner
SELECT COUNT(ip) as nb_occurence
FROM logs
GROUP BY
DATE_FORMAT(`date`, '%Y-%m-%d %h:%i') AS minute,
ip
Ce 1er jet nous permet d'avoir le nombre de requêtes par minute et par IP.
Maintenant, il nous faut récupérer que les IP qui font plus de X requêtes par minutes
Code : Tout sélectionner
SELECT ip, `date`, COUNT(ip) as nb_occurence
FROM logs
GROUP BY
DATE_FORMAT(`date`, '%Y-%m-%d %h:%i') AS minute,
ip
HAVING COUNT(ip) > X
ORDER BY COUNT(ip) DESC, `date` DESC
Et cette requête te donnera les Ip qui dépasse X requêtes par minutes, triées par les requêtes qui font le plus de connexions, puis par date la plus récente.
Alors, le principe de base est le suivant :
"Pour chaque minute et pour chaque IP, je veux le nombre de requête présente dans ma table."
Le principe est donc de [u]grouper par [b]date[/b] (jusqu'a la minute) et par IP[/u], puis de [u]compter le nombre de ligne[/u].
Le début de ta requête est donc semblable à ceci :
[code]SELECT COUNT(ip) as nb_occurence
FROM logs
GROUP BY
DATE_FORMAT(`date`, '%Y-%m-%d %h:%i') AS minute,
ip [/code]
Ce 1er jet nous permet d'avoir le nombre de requêtes par minute et par IP.
Maintenant, il nous faut récupérer que les IP qui font plus de X requêtes par minutes
[code]SELECT ip, `date`, COUNT(ip) as nb_occurence
FROM logs
GROUP BY
DATE_FORMAT(`date`, '%Y-%m-%d %h:%i') AS minute,
ip
HAVING COUNT(ip) > X
ORDER BY COUNT(ip) DESC, `date` DESC [/code]
Et cette requête te donnera les Ip qui dépasse X requêtes par minutes, triées par les requêtes qui font le plus de connexions, puis par date la plus récente.