gpt4 book ai didi

php - 仅更新 MySQL 查询中的特定列(如果设置了特定值)

转载 作者:行者123 更新时间:2023-11-29 12:38:22 25 4
gpt4 key购买 nike

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

我刚刚意识到我的设计存在缺陷。此函数更新我的数据库列 statusdate_modifieddate_completed

这在大多数情况下都很棒,但我刚刚意识到用户经常会忘记“启动”一个设置 date_started 列的任务。

如果从未设置 date_started 列,则其值为 0000-00-00 00:00:00 并带有 date_started code> 列设置为 0000-00-00 00:00:00date_completed 列设置为 NOW...这会破坏这些任务的甘特图功能。

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

我相信在MySQL中使用CASE是可能的,而不必在PHP中查询每条记录来进行检查,然后在需要时进行单独的更新,但我在这些方面的经验很少更高级的 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'";

关于php - 仅更新 MySQL 查询中的特定列(如果设置了特定值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com