仅在设置了特定值的情况下才更新MySQL查询中的特定列

杰森·戴维斯(JasonDavis)

我有一个使用PHP和MySQL构建的项目管理应用程序,下面的功能用于批量更新与项目相关的所有任务,在某些情况下,这可能是一次更新200-300条MySQL记录。

我只是意识到这里的设计存在缺陷。此功能更新我的数据库列statusdate_modifieddate_completed

这在大多数情况下都是很好的,但我只是意识到,通常用户会忘记“启动”设置date_started的Task

如果该date_started列从未设置过,它将具有和的值,0000-00-00 00:00:00并且date_started列设置为0000-00-00 00:00:00date_completed列设置为NOW ...这将破坏我对这些任务的甘特图功能。

因此,我需要在下面修改我的SQL,以便在将其设置为a时statuscompleted某种方式检查以查看date_stared===列0000-00-00 00:00:00是否存在,如果需要,还需要将该列更新为NOW。

我相信可以CASE在MySQL中使用它,而不必将每条记录查询到PHP中进行检查,然后在需要时进行单独的UPDATE,但是我对这些更高级的SQL功能的经验很少。

有人可以帮我解决问题吗?

public function completeAllTasks($projectId, $completed_date = true){
    // Update Project Task STATUS and Date_MODIFIED
    $sql = "UPDATE  `project_tasks`
    SET  `status` =  'Completed',
            `modified_user_id` = '$this->user_id',
            `date_completed` = UTC_TIMESTAMP()
            `date_modified` = UTC_TIMESTAMP()
    WHERE  `project_id` = '$projectId'
    AND `status` != 'Completed'
    AND `heading` != '1'";

    return $this->db->query($sql);
}

更新

我做了一些测试,这似乎可以解决问题。

`date_started` = (CASE
                    WHEN date_started = '0000-00-00 00:00:00'
                      THEN UTC_TIMESTAMP()
                      ELSE date_started
                END)
布赖恩
$sql = "UPDATE  `project_tasks`
SET  `status` =  'Completed',
      `modified_user_id` = '$this->user_id',
      `date_completed` = UTC_TIMESTAMP(),
      `date_modified` = UTC_TIMESTAMP(),
      `date_started` = CASE
          WHEN date_started = '0000-00-00 00:00:00' THEN NOW()
          ELSE date_started
       END
WHERE  `project_id` = '$projectId'
AND `status` != 'Completed'
AND `heading` != '1'";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅在BigQuery中其他列具有特定值的情况下才选择值

仅在特定单词后未设置行的情况下才追加行

仅在具有特定功能的情况下才使用jquery更改CSS属性值

为什么仅在特定情况下才需要在方法签名中抛出IOException?

我如何在Java8中创建Json数组,并且仅在设置值的情况下才打印json?

MySQL触发器:如何仅在填充特定列的情况下插入?

jQuery仅在容器没有特定类的情况下才选择子级

仅在符合特定协议的情况下才快速扩展类

仅在具有特定类的情况下才如何删除拖动的元素?

仅在为Google Apps脚本/ Google表格中的特定列设置特定值时,才如何自动连续进行排序?

LINQ仅在其中一个字段是特定值的情况下才将多个字段分组

在不进行类型转换的情况下访问父类型的arraylist中的特定子类型方法,仅在运行时才知道创建子类型

MYSQL仅在没有手动插入值的情况下才触发触发器-不起作用

如何编写mysql查询以仅在foreign_key存在的情况下插入值

仅在修改某些单元格的情况下,才如何更新单元格中的日期

如何运行查询以仅在指定的列包含值的情况下提取数据

如何在不更新整个行的情况下更改行中某个列的特定值Java Derby数据库

如何在不知道 Spark 中任何特定值的情况下根据 GroupBy 列的值选择列

如何仅在列包含特定字符串的情况下输出行

仅在表的任何行中尚未包含特定值时才更新表

htaccess:仅在特定情况下添加斜杠

仅在graphql需要的情况下如何获取特定字段?

如何在MySQL中不使用子查询的情况下查找一些特定记录

如何仅在Java中具有特定条件的情况下才能唤醒睡眠线程?

使用nodejs,仅在〜3/5情况下查询链码才成功

仅在其所有has_many集合均具有特定列值的情况下查找对象

仅在列包含值的情况下使用SUBTOTAL

仅在没有多值值之一的情况下才对SUM行进行求和

从指定日期回溯7天,仅在存在该天的情况下才检索值