2013-03-28 41 views
1

我一直在寫一個小腳本,應該檢查過期日期前30天,併發送電子郵件提醒。php mysql添加1年迄今,然後比較,如果新的日期將在30天內

我有一個表名爲'completed'的列,表示課程完成,完成的日期。每門課程有效期爲1年。

我一直試圖做一個全年首先添加到「completed」然後檢查新的日期落在前正好是30天now().

舉例:課程結束的12月31日2012年它有效期至2013年12月31日,所以如果TODAY是2013年12月1日,應發送電子郵件提醒。

我有這個小腳本:

SELECT distinct 
    userID 
    , completed+INTERVAL 1 YEAR AS expires 
    FROM activity 
    WHERE completed > NOW() + INTERVAL 30 DAY 

但顯然它不會做的工作...... 任何人都可以點我到正確的方向?

謝謝! 乾杯, 格雷格

回答

1

Euhm,這樣的:

SELECT distinct 
    userID 
    , completed+INTERVAL 1 YEAR AS expires 
    FROM activity 
    WHERE completed+INTERVAL 1 YEAR > NOW() + INTERVAL 30 DAY 
+0

什麼是那麼容易嗎? :)該死... – 2013-03-28 08:46:53

+0

謝謝你們真的很快回復。我非常感謝! – 2013-03-28 08:47:22

2

你真正需要的效率在這裏做的就是讓+INTERVAL 1 YEAR下到哪裏。你可以用簡單的代數來做到這一點。

completed + (1 YEAR) > NOW + (30 DAYS) 

是相同的

completed > NOW + (30 DAYS) - (1 YEAR) 

給予

SELECT distinct 
    userID, 
    ADDDATE(completed,INTERVAL 1 YEAR) AS expires 
FROM activity 
-- Used CURRENT_DATE so that time of day is not a factor 
WHERE completed > SUBDATE(ADDDATE(CURRENT_DATE,INTERVAL 30 DAY), INTERVAL 1 YEAR) 
相關問題