我會定期更新每個用戶的某些操作的最後活動,以便稍後能夠在線獲取用戶。然而,當我運行下面的查詢,它總是給我一個結果,就好像用戶爲在線:用戶總是顯示在線?
SELECT * FROM info WHERE last_activity + INTERVAL 30 SECOND > NOW() and for_whom = '1461' and is_deleted=0
我試圖last_activity列的值更改爲較低的時間,但總是返回的行。 ?
我會定期更新每個用戶的某些操作的最後活動,以便稍後能夠在線獲取用戶。然而,當我運行下面的查詢,它總是給我一個結果,就好像用戶爲在線:用戶總是顯示在線?
SELECT * FROM info WHERE last_activity + INTERVAL 30 SECOND > NOW() and for_whom = '1461' and is_deleted=0
我試圖last_activity列的值更改爲較低的時間,但總是返回的行。 ?
請確保您使用MySQL的NOW()
更新最後一次活動,而不是來自其他源的明確日期時間。
SELECT *
FROM info
WHERE for_whom = 1461
AND is_deleted = 0
AND last_activity > NOW() - INTERVAL 30 SECOND
感謝您的幫助,我通過php設置了時間,這是在不同的Web服務器上。順便說一句,我怎麼能創建一個索引信息(for_whom,is_deleted,last_activity),這是什麼意思? –
@ShikataGaNai:http://dev.mysql.com/doc/refman/5.0/en/create-index.html – Quassnoi
確保您的Web服務器和數據庫服務器有相同的系統時間。
嘗試SELECT NOW()
來檢查數據庫服務器的時間。
您應該檢查你的last_activity
日期時間UTC部分:
另外,如果你在info (for_whom, is_deleted, last_activity)
創建索引,並重寫查詢有點您的查詢就會快得多。很可能你會在那裏發現驚喜。 這裏描述的其他措施可能會有所幫助(例如日期時間同步)
請使用您正在使用的RDBMS標記您的問題 - 這非常適合RDBMS特定的問題。 –
MySQL我想.. – MinhD