Ho una tabella seguente:MySQL Controllare 3 o più consecutivi (specifico) entries
+------------+-----------------------------------------------------------------------------------+
| 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 |
+------------+-----------------------------------------------------------------------------------+
che sto cercando di stabilire, nel modo più semplice possibile (preferibilmente usando solo MySQL), se ci sono 3 o più record consecutivi con type = LOGIN_FAIL
dall'ultimo type = LOGIN_SUCCESS
o dall'inizio della tabella.
Per esempio
+----+---------------+---------+--------+---------------------+----+------------+
| 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 |
+----+---------------+---------+--------+---------------------+----+------------+
sarebbe tornato TRUE
mentre
+----+---------------+---------+--------+---------------------+----+------------+
| 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 |
+----+---------------+---------+--------+---------------------+----+------------+
sarebbe tornato FALSE
. È possibile farlo con una semplice query o devo implementare questo controllo in qualche linguaggio di script?
MODIFICA: Ho dimenticato di dire che questa query dovrebbe essere limitata a un determinato user_id ma presumo che questo non sarebbe un problema.
In caso contrario, o meglio ancora, sarebbe possibile contare quanto i record si adattano a questa criteri (cioè quante esistono consecutivi type = LOGIN_FAILED
record dallo scorso type=LOGIN_SUCCESS
)
Grazie questo quasi risolve il problema :) C'è solo un piccolo problema quando non ci sono 'LOGIN_SUCCESS' nella tabella a tutti. In tal caso restituisce sempre 0. C'è una possibile soluzione per questo? –
Non preoccuparti, lo capisco :) Grazie! :) –