Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: Leguim en 21 Abril 2021, 19:58 PM

Título: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Leguim en 21 Abril 2021, 19:58 PM
Hola,

tengo una tabla 'attempts' donde guardará todas las tentativas erróneas de login de los usuarios,  como máximo pueden llegar a tener 6 tentativas.

Ejemplo:
Código (php) [Seleccionar]

* ID_USER IP
1. 37  ::1
2. 37  ::1
3. 37  ::1
4. 37  ::1
5. 37  ::1
6. 37  ::1
7. 79  225.341.63


Básicamente tenemos 6 tentativas del usuario 37 y una tentativa en la cuenta del usuario 79 (id_user de attempt ya está relacionado con el id_user de users)

Hecho eso ahora necesito que por medio de una consulta eliminar todas las tentativas a uno de estos usuarios si llega a tener 6.

Código (php) [Seleccionar]

"DELETE FROM attempts WHERE [Aquellos usuarios que tengan = 6 tentativas]"
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Carloswaldo en 21 Abril 2021, 21:18 PM
Puedes hacerlo con una subconsulta. Esto me funciona en PostgreSQL:

Código (sql) [Seleccionar]
DELETE FROM attempts
WHERE id_user IN
(SELECT id_user
FROM attempts
GROUP BY 1
HAVING count(*) >= 6);
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Leguim en 22 Abril 2021, 00:26 AM
Hola!

Así como está me funciona, pero para que funcione tal cual quiero necesito hacerlo así.. pero no pasa nada:

Código (php) [Seleccionar]

DELETE FROM attempts A INNER JOIN users U ON A.id_user = U.id_user WHERE A.id_user IN (SELECT A.id_user FROM attempts A INNER JOIN users U ON A.id_user = U.id_user GROUP BY A.id_user HAVING COUNT(*) >= 6) AND U.login_banned = 0
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Danielㅤ en 22 Abril 2021, 02:10 AM
Hola, prueba así:


Código (php) [Seleccionar]

DELETE FROM attempts A INNER JOIN users U ON A.id_user = U.id_user; WHERE A.id_user IN (SELECT A.id_user FROM attempts A INNER JOIN users U ON A.id_user = U.id_user GROUP BY A.id_user HAVING COUNT(*) >= 6) AND U.login_banned = 0



Saludos
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Leguim en 22 Abril 2021, 02:30 AM
Hola,

Me sigue sin funcionar, ya estuve revisando varias veces la consulta pero no encuentro fallos.
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Danielㅤ en 22 Abril 2021, 03:43 AM
Prueba con esta otra:

Código (sql) [Seleccionar]

DELETE FROM attempts A; INNER JOIN users U ON A.id_user = U.id_user; WHERE A.id_user IN (SELECT A.id_user FROM attempts A INNER JOIN users U ON A.id_user = U.id_user GROUP BY A.id_user HAVING COUNT(*) >= 6) AND U.login_banned = 0;



Saludos
Título: Re: [Pregunta]: ¿Cómo puedo hacer esta consulta?
Publicado por: Leguim en 22 Abril 2021, 05:24 AM
Nop, sigue igual sin hacer nada

Si ya pongo alias e Inner JOIN ya no funciona pero si lo dejo tal cual si pero estoy en la nada porque necesito hacerlo así...


Solucionado:
Ya logré hacer que funcione,

Código (php) [Seleccionar]

"DELETE FROM attempts WHERE id_user IN (SELECT A.id_user FROM attempts A INNER JOIN users U ON A.id_user = U.id_user WHERE U.login_banned = 0 GROUP BY A.id_user HAVING COUNT(*) >= 6)"