2015-11-03 96 views
0

我有一張表,需要成員每5天更新一次。如果該行的上一次更新早於5天,則事件調度程序將將任何陳舊行設置爲零。 我的開發環境是:我如何在PHP中創建重複的MySQL事件

Windows 7, 32bit. 
MySQL 5.5.39 
PHP 5.4.45 

我的第一個查詢:

$query = 'CREATE EVENT event_name 
ON SCHEDULE EVERY 5 HOUR 
ON COMPLETION PRESERVE ENABLE 
DO 
UPDATE database_name.table_name SET table_column_name = 0 WHERE (CURRENT_TIMESTAMP - last_update_date) > 5 DAY' 

我跑的腳本在PHP,但在瀏覽器乾脆停止。顯示「找不到服務器」。

然後我在phpMyAdmin中測試了它。這次我得到:

#1064 - 您的SQL語法錯誤。檢查與您的mysql服務器版本相對應的mysql手冊的正確語法,在'DAY'附近使用 。

我查看了MySQL參考手冊(對於版本5.6,雖然)。我的查詢似乎是正確的,除非我失去了一些東西。所以我把查詢改爲:

CREATE EVENT event_name 
STARTS '2015-11-01 00:00:00' 
ENDS '2030-11-01 00:00:00' 
ON SCHEDULE EVERY 5 HOUR 
ON COMPLETION PRESERVE ENABLE 
DO 
UPDATE database_name.table_name SET table_column_name = 0 WHERE (NOW() - last_update_date) > 5 DAY 

還是得到了同樣的結果。 在參考相關主題((How to schedule a stored procedure in MySQL))時,我的php信息中沒有event_scheduler

請幫忙。

+0

一個問題可能是,CURRENT_TIMESTAMP只返回時間值,它似乎LAST_UPDATE_DATE爲datetime,請不要介意一天unnecessary.YOu可能想'TIMESTAMPDIFF'功能 – Mihai

+0

你說得對,LAST_UPDATE_DATE是DATETIME。 謝謝。我將查找如何將該函數應用於我的查詢。 –

回答

1

您嘗試在事件上執行的查詢似乎存在問題。假設last_update_date是datetime,你可以使用DATE_SUB()。

UPDATE database_name.table_name SET table_column_name = 0 WHERE DATE_SUB(NOW(), INTERVAL 5 DAY) < last_update_date 
+0

你假設last_update_date是DATETIME是正確的。 '因爲它是。感謝有關如何使查詢適應DATE_SUB()的示例。測試它,它的工作。 –