2014-06-23 65 views
0

我會定期更新每個用戶的某些操作的最後活動,以便稍後能夠在線獲取用戶。然而,當我運行下面的查詢,它總是給我一個結果,就好像用戶爲在線:用戶總是顯示在線?

SELECT * FROM info WHERE last_activity + INTERVAL 30 SECOND > NOW() and for_whom = '1461' and is_deleted=0 

我試圖last_activity列的值更改爲較低的時間,但總是返回的行。 ?

+2

請使用您正在使用的RDBMS標記您的問題 - 這非常適合RDBMS特定的問題。 –

+0

MySQL我想.. – MinhD

回答

1

請確保您使用MySQL的NOW()更新最後一次活動,而不是來自其他源的明確日期時間。

SELECT * 
FROM info 
WHERE for_whom = 1461 
     AND is_deleted = 0 
     AND last_activity > NOW() - INTERVAL 30 SECOND 
+0

感謝您的幫助,我通過php設置了時間,這是在不同的Web服務器上。順便說一句,我怎麼能創建一個索引信息(for_whom,is_deleted,last_activity),這是什麼意思? –

+0

@ShikataGaNai:http://dev.mysql.com/doc/refman/5.0/en/create-index.html – Quassnoi

1

確保您的Web服務器和數據庫服務器有相同的系統時間。

嘗試SELECT NOW()來檢查數據庫服務器的時間。

0

您應該檢查你的last_activity日期時間UTC部分

另外,如果你在info (for_whom, is_deleted, last_activity)創建索引,並重寫查詢有點您的查詢就會快得多。很可能你會在那裏發現驚喜。 這裏描述的其他措施可能會有所幫助(例如日期時間同步)