2013-02-05 27 views
0

我工作的一個汽車上市的網站,我被困在背後如何得到正確的日期一些邏輯。發行日期與時間cron作業任務

我創建了一個SQL搗鼓數據庫 http://www.sqlfiddle.com/#!2/e111e/3

我想每天上午12點運行cron和我想電子郵件,其中即將過期(忽略已經過期的)的用戶whoselistings一天,但他們之間必須有24小時的差異,因爲我想提前24小時告訴他們上市將會過期。此外,它只應選擇那些僅在一天後不超過1天即將過期的列表。

這裏是我試過到目前爲止

SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, DATEDIFF(expiry_date, NOW()) AS days_left FROM `test` WHERE DATEDIFF(expiry_date, NOW()) = 1 

,但它也選擇它要在不到24小時內到期。

請幫我一下吧。

編輯 //////////////////////////////////////////// ///////////////////

我想通了這一點。告訴我,如果它的正確與否,

SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, DATEDIFF(expiry_date, NOW()) AS days_left, HOUR(TIMEDIFF(expiry_date, NOW())) as hours FROM `test` 

WHERE DATEDIFF(EXPIRY_DATE,NOW())= 1和小時(TIMEDIFF(EXPIRY_DATE,NOW()))> 24

回答

2

MySQL的datediff僅考慮實際天,而不是小時。嘗試使用TO_SECONDS並以秒爲單位的差異。

UPDATE:這是與小提琴作品的代碼:

SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expDate, 
    to_seconds(expiry_date) - to_seconds(NOW()) AS seconds_left 
FROM `test` 
WHERE 
    to_seconds(expiry_date)- to_seconds(now()) <= 86400 
    -- AND ... (only include non-expired entries) 
+0

你能詳細一點嗎? – Asnexplore

+0

感謝隊友的幫助。我已添加的查詢如何?你認爲它的方式正確嗎?請參閱我的編輯 – Asnexplore

+0

不確定,但分裂日期和小時值總是會有點棘手。爲什麼要麻煩呢,爲什麼不直接拿絕對值(比如秒)並用它來比較呢? –

0

建議你create an event scheduler

CREATE EVENT EXIPRIYALERT 
ON SCHEDULE EVERY DAY AT '00:00:00' STARTING FROM '2013-02-04' 
DO 
    --- 

您所查詢的嘗試這個辦法:TIMESTAMPDIFF

TIMESTAMPDIFF(second,Now(),expiry_date)

SELECT DATE_FORMAT(expiry_date, '%b %d %Y %T') AS expiry_date, 
DATEDIFF(expiry_date, NOW()) AS days_left 
FROM `test` 
WHERE TIMESTAMPDIFF(second,Now(),expiry_date) = 86400 
;