2014-07-01 62 views
0

我有一個簡單的系統來監視和繪製MySQL服務器的統計數據。這些服務以PHP編寫並返回JSON。 我們堅持的問題是,因爲今天是2014年7月1日...過去七天圖表和表格的值變爲零。日期計算邏輯在表格輸出中給出正確的日期。我試圖手動調用服務並檢查,實際上JSON中的值都是零。 大多數這個模塊中的查詢使用下列內容:MySQL天減月不工作

$query_string = SELECT new_user_count AS new_user_count 
       FROM kpi_summaries 
       WHERE DATE(date) = CURDATE()-".$n." 
       AND data_type=1"; 

在一個簡單的循環,我使用這個查詢字符串來獲取值從每天早上7最後的日子。這工作到昨天完美(因爲我猜,扣除CURDATE後的日期都在同一個月)。

另一種解釋我的疑問的方式是:如果3天前是上個月的日期,那麼使用CURDATE()是否是不正確的?如果這是錯誤的,那麼正確的方法是什麼?我需要使用DATE_SUB()或類似的東西..?

+3

你試過了:'curdate() - interval $ n day'? –

+0

@GordonLinoff它的工作原理。非常感謝。但我很好奇。你能告訴我爲什麼這個工程和curdate() - $ n不是,而在同一個月,兩個工作..? –

回答

3

這是問題所在。 CURDATE() - 儘管外觀和邏輯 - 不會返回date值。它返回一個字符串或數字。引述documentation

返回當前日期在「YYYY-MM-DD」取決於函數是否在字符串或 數字語境中使用的值或YYYYMMDD 格式。

發生了什麼是上下文期望-的數字。所以,20140701-3是。 。 。 20140698.作爲一個約會是不明智的。它不匹配任何東西。

通過添加interval,我們給編譯器一個提示CURDATE()應該確實是一個日期並減去適當的天數。當然,使用諸如date_sub()之類的函數也會有相同的效果。

+0

非常感謝。明白了! :) –