2011-05-16 62 views
1

我已經設置了一個時間戳字段,其中額外設置爲ON UPDATE CURRENT_TIMESTAMP。 它的工作原理,但我有一個問題:php:sql query(timestamp)

我想檢查所有比今天更早的記錄 - 我該怎麼做?

THX

+2

比今天早或比24小時早? – slandau 2011-05-16 20:11:22

回答

3

你也可以使用DATE_SUB更容易

SELECT * FROM table WHERE timestamp_info < DATE_SUB(NOW(), INTERVAL 1 DAY); 
+0

+1這是好*最近24小時以上* – 2011-05-16 20:52:30

1

一個例子查詢比今天以上(午夜前)將是:

SELECT * FROM my_table WHERE timestamp_column < CURDATE(); 

退房的MySQL Date/Time Functions瞭解更多詳情。如果你想比過去的24小時年長,檢查出fafnirbcrow的答案

+0

這是模棱兩可的,但我懷疑「比今天更早的記錄」可能意味着像「24小時之久」。 – 2011-05-16 20:11:37

+1

這比現在要舊;今天不行。 – cbrandolino 2011-05-16 20:11:43

+0

@cbrandolino,'CURDATE()'返回當前日期的午夜。在此之前的任何時間戳都會比今天更早*。儘管愛驅動器downvotes。 – 2011-05-16 20:16:24

3
SELECT * 
FROM {your_table} 
WHERE {time_stamp_field} < CURDATE() 

或者,你可以做

SELECT * 
FROM {your_table} 
WHERE {time_stamp_field} <= DATE_SUB(CURDATE(), INTERVAL 1 DAY) 

所以,如果CURDATE()回報2011-05-16,DATE_SUB(CURDATE(), INTERVAL 1 DAY)評估爲2011 -05-15。

+0

這是'CURDATE()'不CUR_DATE() – 2011-05-16 20:53:10

1

我假設,通過「比今天更舊」,你的意思是什麼,昨晚在midnigt之前插入。如果你的意思是24小時以前,讓我知道(並編輯你的問題)。

這裏就是你要做的:

  1. 獲取昨天的時間戳:$timestamp = strtotime('24.00 yesterday');
  2. 將其轉換爲mysql日期時間格式:$mysql_datetime = date('Y-m-d H:i:s', $timestamp);
  3. 執行查詢:SELECT foo FROM bar WERE baz < $timestamp
+1

純MySQL解決方案更好數據庫位於單獨服務器上的事件。 – 2011-05-16 20:24:30

+0

@jason你的意思是,不同的時間設置?因爲否則我不能看到任何問題。 – cbrandolino 2011-05-16 20:26:03

+1

是的。通常MySQL和PHP的時間可能不同,甚至有不同的時區設置。特別是在不同的服務器上。如果用戶在MySQL中存儲日期(如「ON UPDATE」所示),那麼他們應該在MySQL中進行比較。 – 2011-05-16 20:28:50