Foro de elhacker.net

Programación => 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
  1. * ID_USER IP
  2. 1. 37  ::1
  3. 2. 37  ::1
  4. 3. 37  ::1
  5. 4. 37  ::1
  6. 5. 37  ::1
  7. 6. 37  ::1
  8. 7. 79  225.341.63
  9.  

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
  1. "DELETE FROM attempts WHERE [Aquellos usuarios que tengan = 6 tentativas]"
  2.  


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
  1. DELETE FROM attempts
  2. WHERE id_user IN
  3. (SELECT id_user
  4. FROM attempts
  5. GROUP BY 1
  6. 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
  1. 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
  2.  


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
  1. 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
  1. 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
  1. "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)"
  2.