PHP 및 MySQL로 구축중인 프로젝트 관리 애플리케이션이 있으며 아래 기능은 프로젝트와 관련된 모든 작업을 대량 업데이트하는 데 사용됩니다. 경우에 따라 한 번에 업데이트되는 MySQL 레코드는 200-300 개일 수 있습니다.
그래도 내 디자인에 결함이 있음을 깨달았습니다. 이 기능은 업데이트 내 데이터베이스 열 status
, date_modified
및date_completed
이것은 대부분의 경우 훌륭하지만 사용자가 date_started
열 을 설정하는 작업을 "시작"하는 것을 종종 잊는다는 것을 깨달았습니다 .
경우 date_started
열이 설정되지 않습니다, 그것은의 값이됩니다 0000-00-00 00:00:00
과과 date_started
에 열 집합 0000-00-00 00:00:00
하고 date_completed
... 이러한 작업이 중단 내 Gantt 차트 기능을 지금 열 집합을.
그래서 아래의 SQL을 수정하여 a status
를 설정할 때 열 === completed
인지 확인 하고 만약 그렇다면 해당 열도 NOW로 업데이트해야합니다.date_stared
0000-00-00 00:00:00
필자는 CASE
검사를 수행하기 위해 모든 레코드를 PHP로 쿼리하고 필요할 때 별도의 UPDATE를 수행하는 대신 MySQL에서 사용 하는 것이 가능하다고 생각 하지만 이러한 고급 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] 삭제
몇 마디 만하겠습니다