2014-09-23 24 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

相关问题