只有当文件的旧值与使用CASE语句的新值不匹配时,才更新MySQL记录


Update a MySQL record only when the old value of a filed does not match the new value using CASE Statement?

我正在构建一个PHP函数,该函数将用于批量"完成"属于特定项目的项目任务。

如果一个项目有50条Task记录,那么我当前的解决方案将更新所有50条记录,将status列设置为Completed,将date_modified列设置为当前的DateTime。这个新的date_modified值也不正确,因为只有一些状态与以前的值发生了实际变化!

我想构建一个SQL查询,它将。。。

  • 仅UPDATE未设置为status===Completed的记录
  • date_modified字段相同,它应该只为现在实际更新的记录更新此DateTime

以下是我从另一个查询中提取的SQL的一部分,该查询做了完全不同的事情,但它确实有正确的表和字段名称,并演示了CASE Statement可能是正确的路径。然而,我对MySQL的了解还不够,无法独自完成这样一个高级风格的查询,如果能得到我的帮助,我将不胜感激!

"从状态未完成的任务中更新状态和日期"很容易翻译为:

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

(你也可以设置date_modified列,每次更新都会自动更新到当前时间戳。没有找到docs链接,但搜索"on update current_timestamp")