2011-02-27 70 views
1

我將首先解釋我的目標:我希望用戶查詢數據庫,並且僅當這些行自上次查詢後已更新時才返回行。沒有意義返回他們已有的數據。所以我創建了一個名爲'lastupdated'的列,這是一個時間戳類型,每次更新該行中的任何內容時都會自動進行更新。這工作正常。現在,我想正確地形成查詢。用戶將保存他們先前查詢的時間戳,並且通過php將用它來比較他們以前的查詢時間和每行更新的時間。如果該行在最後一次查詢後更新,則應該返回該行。有關MySQL時間戳比較的問題

我做了這樣的事情,

SELECT * FROM users WHERE '2011-02-26 01:50:30' <= lastupdated 

但它顯然要太簡單了。我查看了MySQL手冊,發現此頁面爲MySQL Time/Date Page。我確信答案在這裏,但我已經讀過它,沒有任何意義。我有一個MySQL時間戳類型使用的相同格式的時間戳,但我不知道如何比較它們。非常感謝您的幫助。

+0

您是否嘗試過查詢本身。它會工作。 – amitchd 2011-02-27 07:28:24

+0

我檢查過,如果這會工作,我得到一個語法錯誤。我可能錯誤地輸入了一些內容。我將再次檢查併發布結果,謝謝大家。 – JMRboosties 2011-02-27 10:16:58

+0

請注意,您的*小於或等於*可能很容易導致在前一個結果集中具有最大'lastupdated'值的行的重複傳輸。所以,*如果*你可以排除在單秒內插入,選擇,插入的情況,那麼你可能想使用*小於*。 – Timo 2013-12-03 16:11:16

回答

5

該查詢正是你如何做的。只要字符串化的日期時間是MySQL的首選格式(yyyy-mm-dd hh:mm:ss),那麼它將在內部轉換爲日期時間值,並且比較將繼續。

如果您想做比簡單的「大於/小於/等於」類型比較更復雜的事情,您只需要找到日期/時間函數。 「任何有12月時間戳的記錄」。

3

正如馬克所說,你的代碼應該工作。但是你可能想用編程的方式用變量來代替文字。

如果你沒有指定爲字符串的日期時間,而是作爲一個時間戳(例如,從使用PHP time()功能),那麼你可以使用下面的查詢:

$query = "SELECT * FROM users WHERE FROM_UNIXTIME(" . $timestamp . ") <= lastupdated"; 

的關鍵是FROM_UNIXTIME() MySQL的功能。