我有一个使用PHP和MySQL构建的项目管理应用程序,下面的功能用于批量更新与项目相关的所有任务,在某些情况下,这可能是一次更新200-300条MySQL记录。
我只是意识到这里的设计存在缺陷。此功能更新我的数据库列status
,date_modified
和date_completed
这在大多数情况下都是很好的,但我只是意识到,通常用户会忘记“启动”设置date_started
列的Task 。
如果该date_started
列从未设置过,它将具有和的值,0000-00-00 00:00:00
并且date_started
列设置为0000-00-00 00:00:00
,date_completed
列设置为NOW ...这将破坏我对这些任务的甘特图功能。
因此,我需要在下面修改我的SQL,以便在将其设置为a时status
以completed
某种方式检查以查看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] 删除。
我来说两句