2014-09-23 22 views
0

我有一個PHP函數,我正在構建將用於批量「完成」屬於特定項目的項目任務。只有當一個字段的舊值與使用CASE語句的新值不匹配時才更新MySQL記錄?

如果一個項目有50條任務記錄,然後我目前的解決方案將更新所有50條記錄,設置statusCompleteddate_modified列到當前日期時間現在。這個新的date_modified值也是不正確的,因爲只有一些狀態實際上已經從他們以前的值改變了!

我想建立一個SQL查詢,反而會...

    ,尚未設置爲 status === Completed
  • 同樣與date_modified
  • 只更新記錄,它只應該更新此DateTime以獲取實際正在更新的記錄!

這裏是我已經拿出另一個查詢做了完全不同的SQL的一部分,但它確實有正確的表和字段名稱,並演示瞭如何CASE Statement可能是正確的路徑。然而,我不知道MySQL能夠自己完成這樣一種高級風格的查詢,並會感謝我能夠獲得的所有幫助!

回答

2

「更新從任務,其中狀態未完成狀態和日期」很容易地轉化爲:

UPDATE tasks SET status = 'Completed', date_modified = NOW() WHERE status != 'Completed'

(你也可以設置你的date_modified列了在自動地更新到一個方法目前沒有找到docs-link,但是搜索「on update current_timestamp」)

+0

OMG,我很滿意我的CASE聲明,在另一個查詢中,我甚至沒有想過直,我現在感覺很蠢,謝謝指出明顯! – JasonDavis 2014-09-23 04:47:08

+0

沒問題,有時候人們會覺得太複雜:) – Felk 2014-09-23 04:49:29

+0

關於自動更新修改日期的最新更新,我沒有走這條路線的原因是我有一個Sort列和一個Drag n Drop接口然後更新所有記錄的排序順序,這會導致修改後的列在不應該出現的時候一直更新,感謝您的建議 – JasonDavis 2014-09-23 04:50:07

相關問題