[Pregunta]: ¿Cómo puedo hacer esta consulta?

Iniciado por Leguim, 21 Abril 2021, 19:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

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]"

Carloswaldo

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);

Leguim

#2
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

Danielㅤ

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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Leguim

Hola,

Me sigue sin funcionar, ya estuve revisando varias veces la consulta pero no encuentro fallos.

Danielㅤ

#5
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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Leguim

#6
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)"