Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用CASE语句仅在字段的旧值与新值不匹配时更新MySQL记录?_Php_Mysql_Sql_Case Statement - Fatal编程技术网

Php 使用CASE语句仅在字段的旧值与新值不匹配时更新MySQL记录?

Php 使用CASE语句仅在字段的旧值与新值不匹配时更新MySQL记录?,php,mysql,sql,case-statement,Php,Mysql,Sql,Case Statement,我正在构建一个PHP函数,用于批量“完成”属于特定项目的项目任务 如果一个项目有50条任务记录,那么我当前的解决方案将更新所有50条记录,将状态列设置为完成,将日期_修改列设置为当前的现在日期时间。这个新的date\u modified值也将是不正确的,因为只有一些状态实际更改了以前的值 我想构建一个SQL查询,它将改为 仅更新尚未设置为状态的记录=已完成 与date\u modified字段相同,它应该只为现在实际更新的记录更新此日期时间 下面是我从另一个查询中提取的SQL的一部分,该查询

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

如果一个项目有50条任务记录,那么我当前的解决方案将更新所有50条记录,将
状态
列设置为
完成
,将
日期_修改
列设置为当前的现在日期时间。这个新的
date\u modified
值也将是不正确的,因为只有一些状态实际更改了以前的值

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

  • 仅更新尚未设置为
    状态的记录
    =
    已完成
  • date\u modified
    字段相同,它应该只为现在实际更新的记录更新此日期时间
下面是我从另一个查询中提取的SQL的一部分,该查询做了一些完全不同的事情,但它确实有正确的表名和字段名,并演示了
CASE语句如何可能是正确的路径。然而,我不知道足够的MySQL能够做这样一个高级风格的查询我自己,并将感谢所有的帮助,我可以得到

“从状态未完成的任务中更新状态和日期”很容易理解为:

updatetasks SET status='Completed',date\u modified=NOW()其中status!='已完成“


(你也可以设置你的
date\u modified
列,每次更新都会自动更新到当前时间戳。没有找到文档链接,但搜索“on update current\u timestamp”)

OMG,我在另一个查询中被我的案例陈述弄得不知所措,我现在觉得很傻,感谢您指出显而易见的问题!没问题,人们有时会觉得太复杂:)关于你上次的更新,关于自动更新修改日期,我之所以没有这样做,是因为我有一个排序列和一个拖放界面,然后更新所有记录的排序顺序,这将导致修改后的列在不应该更新的时候一直被更新,不过还是要感谢您的建议