我有一個包含事件信息的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. 如何根據日期自動更新數據庫?
- 2. MySQL/PHP - 根據日期更改狀態
- 3. MySQL - 根據日期加入
- 4. 根據日期查詢mysql
- 5. MySQL自動更新表數據
- 6. 表更新日期時間自動更新:MS SQL08
- 7. 根據日期自動執行操作。 Php/Mysql
- 8. 比較上次日期和當前日期並根據條件更新表格
- 9. 根據參數和最後一行日期在臨時表中更新日期
- 10. MySQL根據多個表更新列
- 11. 根據連接條件從其他表更新日期-1
- 12. 特定日期過後自動更新
- 13. 自動更新WordPress的發佈日期
- 14. MySQL更新根據選擇
- 15. 根據在mysql中的時間創建自動更新行
- 16. 新日期()與ISO 8061日期創建日期根據時區
- 17. 日期功能,而無需更新根據上重新計算當前日期
- 18. 根據日期
- 19. 根據日期
- 20. 列表視圖數據更改根據日期更改
- 21. 日期創建日期和上一次更新日期爲MySQL
- 22. Php mysql根據日期加入羣組
- 23. MySQL的 - 根據日期/時間
- 24. 日曆根據日期在2個表
- 25. 如何根據定期json更新以動畫方式自行安排列表?
- 26. Mysql根據不同表中的日期時間過濾數據
- 27. 更新日期時自動更新路徑?
- 28. 更新時間:自動更新日期/時間字段
- 29. 使用修改日期自動更新Google電子表格
- 30. 如何更新現有日期並在MySQL表中插入新日期
當請求事件時更新它。 – 2010-09-28 13:48:01
日期是唯一的標準?那你爲什麼要更新任何東西?使用一些日期算術代替例如比較日期值與現在()。 – VolkerK 2010-09-28 15:27:23
這是一個很好的觀點,但應用程序嚴重依賴於事件狀態,因此不斷比較日期不是一種選擇。如果狀態僅被請求了幾次,這將是有意義的。根據要求更新是一個選項。我感謝你們倆。 – JoaoPedro 2010-09-28 15:52:38