我有如下表:MySQL的檢查3個或更多的連續(特定的)條目
+------------+-----------------------------------------------------------------------------------+
| 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 |
+------------+-----------------------------------------------------------------------------------+
我試圖確定,在最簡單的方式(最好是剛使用MySQL),如果有3個或自上一次type = LOGIN_SUCCESS
以來的更多連續記錄(自type = LOGIN_FAIL
開始)或表開始。
例如
+----+---------------+---------+--------+---------------------+----+------------+
| 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 |
+----+---------------+---------+--------+---------------------+----+------------+
將返回TRUE
而
+----+---------------+---------+--------+---------------------+----+------------+
| 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 |
+----+---------------+---------+--------+---------------------+----+------------+
將返回FALSE
。是否可以通過簡單查詢來完成此操作,還是需要使用某種腳本語言來實現此檢查?
編輯:我忘了提及這個查詢將被限制到某個user_id,但我認爲這不會是一個問題。
否則,甚至更好,纔有可能算多少記錄如何適應這一標準(即自去年type=LOGIN_SUCCESS
連續type = LOGIN_FAILED
記錄存在多少)
由於這幾乎解決了這個問題:)這裏有一個當有表中沒有'LOGIN_SUCCESS'在所有的小問題。在這種情況下,它總是返回0.是否有可能的解決方法? – 2012-07-21 13:42:58
別擔心,我知道了:)謝謝! :) – 2012-07-21 13:56:40