Foros del Web » Programando para Internet » PHP »

Problema simple, ¿solución compleja?

Estas en el tema de Problema simple, ¿solución compleja? en el foro de PHP en Foros del Web. Saludos !! Chequen mi siguiente problema, ¿alguna idea de por dónde empezar? Tengo unos foros hay muchas tablas, una de ellas es mensaje y es ...
  #1 (permalink)  
Antiguo 17/04/2006, 08:21
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Exclamación Problema simple, ¿solución compleja?

Saludos !!

Chequen mi siguiente problema, ¿alguna idea de por dónde empezar?

Tengo unos foros hay muchas tablas, una de ellas es mensaje y es similar a esta:

TABLA MENSAJES
mensaje_id (INT)
mensaje_texto (TEXT)
fechahora (DATETIME)
direccion_ip (CHAR)
usuario_id (INT)(FK)


Ahora, si yo quiero listar la cantidad de mensajes que se insertaron entre un rango de fechas, ¿es simple no?

Pero ahora miren este problema.

A mí me gustaría listar sólo los mensajes que vienen de una direccion_ip que ha escrito más de 5 mensajes en un rango de tiempo menor o igual a 16 horas.


Esto para detectar usuarios que entraron a mis foros a meter spam. Alguna idea, please, que no sé ni por dónde empezar.

Atención Moderadores: Resulta tentador mover mi mensaje al foro de bases de datos, pero resulta que esta consulta quizá no se pueda hacer directamente y se necesite una buena parte de procesamiento en PHP, de manera que agradecería fueran tan amables de no trasladarlo, thanks.
__________________
"Di no al Internet Explorer" -Proverbio Chino-

Última edición por uamistad; 17/04/2006 a las 08:37
  #2 (permalink)  
Antiguo 17/04/2006, 11:10
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
No sean gachos, aunque sea con una idea.

O como dicen los ambulantes aquí en el metro de la Ciudad de México:

"ahi con lo que gusten cooperar"
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 17/04/2006, 16:05
 
Fecha de Ingreso: abril-2006
Mensajes: 47
Antigüedad: 18 años
Puntos: 0
Supongo que estarás usando MySQL

Yo creo que un trigger podría solucionar este problema, ya que cada vez que se inserte un mensaje se active el trigger y si cumple tus condiciones se ponga la ip como bloqueada por ejemplo (lo bueno seria crear una trabla de ips bloqueadas)

Pero solo funcionaria apartir de mysql 5.0.10

no estoy muy informado, pero creo que se podría hacer.
puedes informarte mas en mysql.com o en mysql-hispano.org
  #4 (permalink)  
Antiguo 17/04/2006, 16:17
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por uamistad
Atención Moderadores: Resulta tentador mover mi mensaje al foro de bases de datos, pero resulta que esta consulta quizá no se pueda hacer directamente y se necesite una buena parte de procesamiento en PHP, de manera que agradecería fueran tan amables de no trasladarlo, thanks.
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #5 (permalink)  
Antiguo 17/04/2006, 16:21
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Lo que menciona ordsanmi suena interesante y una manera de poder resolver tu problema.
Encontre este link acerca de triggers http://www.mysql-hispano.org/page.php?id=36&pag=1 espero te sirva
  #6 (permalink)  
Antiguo 18/04/2006, 04:46
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Bueno, si lo que queres es hacer un listado de estas ips, a mi se me ocurre que se podria hacer algo asi (intento explicar la idea pero seguramente se podrá hacer de muchas maneras):
- Primero, mediante una consulta obtenés todas las ip que escribieron mas de 5 mensajes.
- Ahora, para hacerlo más simple, por cada ip haces una consulta para obtener los mensajes que le corresponden, ordenados por el campo fechahora en forma descendiente.
- Ahora habría que seguir el siguiente procedimiento: si la diferencia entre la fecha del primer mensaje y la del quinto (recordemos que estan ordenados por fecha) es menor o igual a 16 horas, entonces esa ip escribio al menos 5 mensajes en menos de 16 horas. Si no es así, habría que seguir el mismo procedimiento pero para el segundo y el sexto mensaje, y asi sucesivamente.

Es sólo una idea, seguramente se puede mejorar mucho (utilizar una sola consulta, etc).
Saludos.
  #7 (permalink)  
Antiguo 18/04/2006, 04:58
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Ahhhhhhhhhhhh báaaaaaaaaaaaaarbaro !

No se me había ocurrido. En la tarde estuve pensando como iba a poder hacerlo más o menos di con un algoritmo pero ni te digo la cantidad de consultas que tenía pensado hacer porque me daría pena, jajaja.

Leí lo de los triggers y suena fantástico. Yo podría instalar aquí MySQL5 pero en el server en el que me hospedo no tienen la versión y significaría una mudanza entera, con sus correspondientes pruebas, contratiempos y gastos.

Me quedo con la de Notwen, es simple y satisface las condiciones de la consulta que necesito.

Ahorita mismo lo implemento, thanks !

Por cierto, BIENVENIDO !!
__________________
"Di no al Internet Explorer" -Proverbio Chino-
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:54.