Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Leguim en 23 Abril 2021, 00:07 am



Título: [Pregunta]: ¿Cómo hacer esta consulta 2?
Publicado por: Leguim en 23 Abril 2021, 00:07 am
Hola,

bueno la anterior consulta ya la hace correctamente ahora tengo problemas con esta otra que es muy similar. Para este caso ya no va a eliminar las tentativas de un usuario si este llego a 6 sino que las va a eliminar si son 1 o 5 tentativas pero las eliminará si la fecha (unix) de creación tiene una antiguedad de 12 horas o más. (pero solo se evalua la más reciente)

Es decir, como son los unix no son mas que numeros enteros lo que hago para evaluar la mas reciente y ver si tiene esa antiguedad de 12 horas es tomar dentro de todos los registros/tentativas del usuario el unix mas grande.

Es decir:
Código
  1. $query = $con->prepare('DELETE FROM attempts WHERE id_user IN (SELECT A.id_user, MAX(A.unix_date) FROM attempts A INNER JOIN users U ON A.id_user = U.id_user WHERE (:unix_grace_delete_attempts >= MAX(A.unix_date)) AND U.login_banned = 0 GROUP BY A.id_user HAVING COUNT(*) >= 1 AND COUNT(*) <= 5');
  2. $query->execute(array(':unix_grace_delete_attempts' => $unix_grace_delete_attempts));
  3.  

Siempre uso BETWEEN en vez de hacer COUNT(*) >= 1 AND COUNT(*) <= 5 pero mientras mas simple de entender la consulta mejor para todos.

En relación a sobre qué es $unix_grace_delete_attempts lo que le estoy haciendo es restarle a el unix actual unas 12 horas.

Código
  1. $unix_now = time();
  2. $unix_grace_delete_attempts = strtotime('-12 hours', $unix_now);
  3.