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:
* 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.
"DELETE FROM attempts WHERE [Aquellos usuarios que tengan = 6 tentativas]"
Puedes hacerlo con una subconsulta. Esto me funciona en PostgreSQL:
DELETE FROM attempts
WHERE id_user IN
(SELECT id_user
FROM attempts
GROUP BY 1
HAVING count(*) >= 6);
Hola!
Así como está me funciona, pero para que funcione tal cual quiero necesito hacerlo así.. pero no pasa nada:
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
Hola, prueba así:
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
Hola,
Me sigue sin funcionar, ya estuve revisando varias veces la consulta pero no encuentro fallos.
Prueba con esta otra:
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
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,
"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)"