Обновляйте определенный столбец в MySQL Query только в том случае, если для него установлено определенное значение

У меня есть приложение для управления проектами, которое я создаю с помощью PHP и MySQL, и приведенная ниже функция используется для массового обновления всех задач, связанных с проектом, в некоторых случаях это может быть 200-300 записей MySQL, которые обновляются одновременно.

Я только что понял, что в моем дизайне есть недостаток. Эта функция ОБНОВЛЯЕТ мои столбцы базы данных 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 столбец, установленный на СЕЙЧАС … это нарушает функциональность моей диаграммы Ганта для этих задач.

Поэтому мне нужно изменить мой SQL ниже, чтобы при установке status в completed он каким-то образом проверит, date_stared колонка === 0000-00-00 00:00:00 и если это произойдет, он должен будет также обновить этот столбец до СЕЙЧАС.

Я считаю, что это возможно с помощью CASE в MySQL вместо необходимости запрашивать каждую запись в 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)

0

Решение

$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'";
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]