- ROW_ID(初級)
- USER_ID
- user_ip
- DATE_START(Unix時間戳)
- DATE_END一個MySQL表(unix時間戳)
我想只選擇用戶ID此表(不同)IF有至少2點連續的行WHERE
在[行X]的user_ip是與在user_ip不同[行X + 1]
AND
ABS(在[行X] DATE_END - 在DATE_START [行X + 1])< = 20
行應按row_id ASC進行排序,以便我們可以連續獲取行X,X + 1等。
我用PHP很容易做到了這一點,但它非常慢,所以我認爲可以使用sql來完成。
例
row_id | user_id | user_ip | date_start | date_end
1 , 1 , 127.0.0.1 , 1469100096 , 1469100099
2 , 2 , 5.5.5.5 , 1469100054 , 1469100055
3 , 3 , 4.4.4.4 , 1469100032 , 1469100036
4 , 1 , 6.6.6.6 , 1469100117 , 1469100099
5 , 4 , 127.0.0.1 , 1469100001 , 1469100005
6 , 2 , 127.0.0.1 , 1469100555 , 1469100565
從這一點,我們應該得到公正的用戶ID 1,因爲用戶ID 1 2個連續行+第一行的DATE_END(1469100099)有不同的IP - 日期下一行開始1(469100117)= 18這就是< = 20.
我們不應該返回用戶ID 2,因爲雖然它驗證了第一個條件,但它不會驗證第二個條件與date_end和DATE_START。
看:stackoverflow.com/questions/9824948/...並嘗試這樣的事情: SELECT parent.id FROM表名父內部聯接的表名AS孩子在parent.user_ip = child.user_ip和DATE_SUB ((parent.date_end -child.date_start),INTERVAL 20 HOUR)和parent.user_id = child.user_id; – Nyranith