tengo una tabla siguiente:MySQL Compruebe si hay 3 o más consecutivos (específico) entradas
+------------+-----------------------------------------------------------------------------------+
| Field | Type |
+------------+-----------------------------------------------------------------------------------+
| id | int(10) unsigned |
| type | enum('REGISTER','ACTIVATE','LOGIN_SUCCESS','LOGIN_FAIL','LOGOUT','LOCK','UNLOCK') |
| user_id | int(10) unsigned |
| mod_id | int(10) unsigned |
| date | timestamp |
| ip | int(10) unsigned |
| user_agent | text |
+------------+-----------------------------------------------------------------------------------+
Estoy tratando de determinar, de la manera más sencilla posible (preferiblemente justo usando MySQL), si hay 3 o más registros consecutivos con type = LOGIN_FAIL
desde el último type = LOGIN_SUCCESS
o desde el inicio de la tabla.
Por ejemplo
+----+---------------+---------+--------+---------------------+----+------------+
| id | type | user_id | mod_id | date | ip | user_agent |
+----+---------------+---------+--------+---------------------+----+------------+
| 6 | LOGIN_SUCCESS | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 7 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 8 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 9 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
+----+---------------+---------+--------+---------------------+----+------------+
volvería TRUE
mientras
+----+---------------+---------+--------+---------------------+----+------------+
| id | type | user_id | mod_id | date | ip | user_agent |
+----+---------------+---------+--------+---------------------+----+------------+
| 6 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 7 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 8 | LOGIN_SUCCESS | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
| 9 | LOGIN_FAIL | 3 | NULL | 2012-07-21 14:08:32 | 0 | agent |
+----+---------------+---------+--------+---------------------+----+------------+
volvería FALSE
. ¿Es posible hacer esto con una simple consulta o necesito implementar esta verificación en algún lenguaje de script?
EDIT: me olvidó mencionar que esta consulta tendría que ser limitado a un cierto user_id pero supongo que esto no sería un problema.
De lo contrario, o mejor aún, ¿sería posible contar lo mucho que los registros se ajustan a este criterio (es decir, cuántos existen consecutivos type = LOGIN_FAILED
registros desde el pasado type=LOGIN_SUCCESS
)
Gracias esta casi soluciona el problema :) Sólo hay un pequeño problema cuando no hay 'LOGIN_SUCCESS' en la tabla en absoluto. En cuyo caso, siempre devuelve 0. ¿Hay una solución posible para esto? –
No se preocupe, lo entiendo :) ¡Gracias! :) –