2012-05-09 39 views
2

我有一段代碼告訴你什麼時候聯繫人不會被聯繫,並在日曆上突出顯示當天。即如果您最後一次與該人聯繫過,則突出顯示的日期將在下個月的頁面上顯示一個月。如何獲得未來12日的未來日期

我想要做的是每個月最多一年這樣做。因此,在前面的示例中,如果我在突出顯示的日期之後移動了一個月,它將「未聯繫兩個月」,三個月,四個月,以及第四至十二個月。

這是我現在使用的「不接觸一個月」查詢什麼:

SELECT DATE_FORMAT(DATE(DATE_ADD(date, INTERVAL 1 MONTH)), '%Y-%c-%d') AS overDate 
    FROM contact_method_history 
WHERE DATE(DATE_ADD(date, INTERVAL 1 MONTH)) = '$SQLDate' 
AND entityRef = ".$this->entityId." 
ORDER BY date DESC 
LIMIT 1 

$這個 - > ENTITYID可能是像153或9045,它只是在接觸參考。

$ SQLDate的格式爲'2012-05-09'。

+0

對不起,我沒有正確完成我的標題。它應該是「如何獲得未來12個未來日期」。 – imperium2335

+0

雖然這*可以*在SQL中完成,我建議它可能屬於您的應用程序代碼。 – eggyal

+0

您可以編輯問題 - 和標題。 –

回答

0

我不同意評論:如果你做了一個循環,那麼你將運行12個查詢,而不是1,這是性能下降。另一方面,「全在一起」查詢語句並非微不足道:

SELECT date 
, i.m 
, DATE_FORMAT(DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH)), '%Y-%c-%d') AS overDate 
FROM contact_method_history AS cmh 
, (
    SELECT 1 as m 
    UNION ALL SELECT 2 as m 
    UNION ALL SELECT 3 as m 
    UNION ALL SELECT 4 as m 
    UNION ALL SELECT 5 as m 
    UNION ALL SELECT 6 as m 
    UNION ALL SELECT 7 as m 
    UNION ALL SELECT 8 as m 
    UNION ALL SELECT 9 as m 
    UNION ALL SELECT 10 as m 
    UNION ALL SELECT 11 as m 
    UNION ALL SELECT 12 as m 
) AS i 
WHERE (DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH)) = '$SQLDate') 
AND (entityRef = ".$this->entityId.") 
GROUP BY i.m, DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH)) 
+1

我不能爲其他人說話,但我並沒有建議提出超過1個查詢:簡單地說,獲得最後一次聯繫日期,然後突出顯示應用程序中的每月週年紀念 - 不需要進一步查詢。 – eggyal

+0

我明白你的意思了。這是迄今爲止最好的想法,只需使用上次聯繫日期作爲參考,然後計算接下來幾個月的日期。 – imperium2335