@Artyom_Ryzhenky
обычный человек

Почему по разному выполняется условие, для чего так сделано?

Здравствуйте!
db::run('update users set date_last = date_format(now(), \'%d.%m.%Y\'), bonus_status = case when datediff(date_format(now(), \'%Y-%m-%d\'), str_to_date(date_last, \'%d.%m.%Y\')) > 1 then 1 else bonus_status + 1 end, bonus_last = floor(10 + rand() * 91), bonus_log = 1, gold = case when bonus_status < 5 then gold + 1 else gold + bonus_last end where id = ? && date_last != date_format(now(), \'%d.%m.%Y\') && training > 12 limit 1', [uid]);

На версии 5.7 сначала отрабатывает условие
bonus_status = case when datediff(date_format(now(), \'%Y-%m-%d\'), str_to_date(date_last, \'%d.%m.%Y\')) > 1 then 1 else bonus_status + 1 end
, а потомdate_last = date_format(now(), \'%d.%m.%Y\'). (так и надо, так правильно работает логика: взять предыдущее значение date_last, выполнить условие и уже потом изменить значение date_last на текущее)
На версии 8.0.15 сначала отрабатывает date_last = date_format(now(), \'%d.%m.%Y\') и в условии нарушается логика.
Спасибо.
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы