我有一個包含事件信息的MYSQL
表。我需要一種機制,根據它的日期更新每個事件的狀態(如果它過去的日期是「over」)。 做這樣的事情最好的辦法是什麼?更新任何用戶登錄時的事件狀態(對大多數用戶而言無用的例程),創建某種內部任務(如cron作業?)或任何其他方式。 現在,只有當創建者登錄時,事件的狀態纔會更新。這可以工作,但是另一個用戶會將事件視爲「已計劃」,直到創建者登錄,即使日期已過。順便使用PHP
。謝謝根據日期自動更新MYSQL表
回答
我建議任何時候狀態請求時更新狀態。或者更好的是,根本不要將狀態存儲在數據庫中,而只是根據其他變量在每次請求時計算它。這樣,無論何時你有一個表格列表狀態或某人請求狀態,只需將事件日期,與今天的日期進行比較,並將它們發送到「未開始」,「正在進行」或「結束」。
除非你需要更多可能的狀態(「計劃」,「準備」,「設置」等)。然後,您需要爲這些狀態中的每個狀態計劃日期/時間,否則您需要存儲狀態變量。無論哪種方式,您都可以在請求時更新狀態(根據當天的日期和任何其他相關信息)。
根據要求更新是絕對要走的路。不將數據存儲在數據庫中會使一切變得更加複雜。列出過去的事件是應用程序中的常見任務,每次請求列表時都需要進行大量處理。有很多事情取決於事件的狀態。不過謝謝。 – JoaoPedro 2010-09-28 23:13:13
@JoaoPedro,根據事件狀態存在「太多東西」的事實並不一定證明在DB中存儲額外的數據是正確的 - 實際上恰恰相反;大多數數據庫系統都是I/O綁定的,這意味着他們正在等待數據被讀取和寫入存儲器,並且向混合中添加額外的不必要和非常便宜的可計算列將通常減慢(!)系統。對於單個領域(加上索引)而言不是太多,但如果作爲一個原則來使用,那麼它會疊加起來。 – Unreason 2011-01-31 15:37:53
在用戶登錄時更新並不是一個好主意,因爲它增加了太多的壓力(如果有很多用戶)。做到這一點的最佳方式是在上午12點以後或每天開始時每天晚上運行cronjob。如果你仍然想保留你的舊代碼,然後用日期代碼包裝它。 僞看起來像:
$updated_last = last modification time of the file "updated";
if($updated_last is more than 1 day) {
update db; (your old code)
touch file "updated";
}
除非你必須處理很多時區,否則我會選擇午夜cron作業。重新計算似乎相當浪費,並且從維護角度來看,按需計算可能會變得相當混亂,因爲它會使數據庫處於部分不正確的狀態。
每個答案接受你的更新理由。 但是,讓我質疑這個決定,並延續了Srapnel上校的意見。
更新可以被視爲浪費資源,因爲您可以在內存日期比較(這比存儲器的I/O更快的數量級)上計算它。
有兩種方法可供選擇:
- 查詢/視圖可以做到這一點(和成本確實應該忽略不計)
- 其實這樣做對PHP端結果檢索後(認爲這是一個格式/演示任務)
- 它甚至可以在客戶端,其中如果可能的話,性能方面將是最好的解決方案做了(這可能導致維護/安全問題)
當然,可能存在忽略這些解決方案的正當理由,但我認爲其本身的性能還不夠(大多數數據庫都是I/O綁定的)。
- 1. MySQL自動更新日期字段
- 2. 根據空日期字段在mysql中更新日期格式
- 3. 如何根據日期自動更新數據庫?
- 4. Rails表單:根據日期集自動設置未來日期
- 5. SQL新日表根據日期
- 6. MySQL/PHP - 根據日期更改狀態
- 7. 根據當前日期更新'日期'數據
- 8. MySQL - 根據日期加入
- 9. 根據日期查詢mysql
- 10. MySQL:根據來自A和B表的數據更新表A
- 11. MySQL自動更新表數據
- 12. 根據當前時間更新MySQL中日期的方法?
- 13. 根據日期自動編輯行
- 14. 宏數據透視表自動更新日期和名稱
- 15. 在MS Access中可以根據日期標準自動更新數據嗎?
- 16. 表更新日期時間自動更新:MS SQL08
- 17. 根據日期自動執行操作。 Php/Mysql
- 18. 根據MySQL日期發送自動電子郵件
- 19. 使用mysql根據日期字段自動刪除行
- 20. 更改列表顏色根據日期
- 21. 如何根據來自其他日期的輸入更新日期?
- 22. 根據mysql表列日期選擇datetimepicker日期(c#)
- 23. 根據已知日期隨機更新日期時間字段
- 24. 根據日期範圍更改MySQL表中的值
- 25. mysql數據庫更新日期
- 26. 根據參數和最後一行日期在臨時表中更新日期
- 27. 比較上次日期和當前日期並根據條件更新表格
- 28. 在mySql中更新日期
- 29. MySQL根據多個表更新列
- 30. 根據選擇更新MySQL表
當請求事件時更新它。 – 2010-09-28 13:48:01
日期是唯一的標準?那你爲什麼要更新任何東西?使用一些日期算術代替例如比較日期值與現在()。 – VolkerK 2010-09-28 15:27:23
這是一個很好的觀點,但應用程序嚴重依賴於事件狀態,因此不斷比較日期不是一種選擇。如果狀態僅被請求了幾次,這將是有意義的。根據要求更新是一個選項。我感謝你們倆。 – JoaoPedro 2010-09-28 15:52:38