Обновлять запись MySQL только в том случае, если старое значение поля не совпадает с новым значением с помощью оператора CASE?

У меня есть PHP-функция, которую я создаю, которая будет использоваться для массового «завершения» задач проекта, которые принадлежат конкретному проекту.

Если у проекта 50 записей задач, то мое текущее решение обновит все 50 записей, установив status столбец к Completed и date_modified столбец к текущему сейчас DateTime. Это новый date_modified значение также будет неверным, поскольку только некоторые из статусов фактически изменились по сравнению с их предыдущим значением!

Я хотел бы создать запрос SQL, который вместо этого …

  • Только ОБНОВЛЕНИЕ записей, которые НЕ УЖЕ установлены status === Completed
  • То же самое с date_modified поле, это должно только обновить этот DateTime для записей, которые фактически обновляются сейчас!

Вот часть SQL, который я взял из другого запроса, который сделал что-то совершенно другое, но он имеет правильные имена таблиц и полей и демонстрирует, как CASE Statement может быть правильный путь. Однако я не знаю достаточно MySQL, чтобы самостоятельно выполнять такой сложный запрос, и был бы признателен за любую помощь, которую я могу получить!

0

Решение

«Обновить статус и дату из задач, где статус не завершен» довольно легко переводится на:

UPDATE tasks SET status = 'Completed', date_modified = NOW() WHERE status != 'Completed'

(вы также можете установить date_modified столбец вверх таким образом, что автоматически обновляет текущую метку времени с каждым обновлением. Не нашел ссылку на документацию, но по запросу «on update current_timestamp»)

2

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

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

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