Command execute row count

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Command execute row count

Сообщение Brainfuck »

При выполнении команды update возвращает неверное количество строк. Это норма? Я имею ввиду это:

Код: Выделить всё

$updatedCount = \Yii::$app->db->createCommand($sql)->execute();
Просто я точно знаю что должно было затронуть большее количество строк чем то что вернуло. Он что как-то некорректно работает с update?

P.S. Квери выглядит как большой (50к+) батч апдейт:

Код: Выделить всё

update mytable set myfield = (case id when 1 then 123 when 2 then 456 end) where id in (1, 2);
Поэтому я и говорю что уверен - должно быть больше затронуто. Если просто селектнуть эти записи по id то получится (я проверял) ровно столько сколько я и передал на апдейт, а он мне возвращает что типа обновлено например 1к или даже меньше. Вот как так то? Это ошибка? Или действительно столько обновлено?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Command execute row count

Сообщение ElisDN »

Если значение в строке не изменилось, то строка не посчитается.
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Command execute row count

Сообщение Brainfuck »

ElisDN писал(а): 2019.02.19, 16:54 Если значение в строке не изменилось, то строка не посчитается.
Но почему оно могло не измениться? Я же привел вам пример запроса. Там просто не могло не обновить! Потому что селектом все эти строки которые в where выбираются без проблем. Case (да и весь запрос) я формирую вручную, но там тоже все верно. Он должен обновлять все!

А теперь внимание самое интересное - он работает очень нестабильно. Например сейчас он "вроде как обновил" все 50к+ строк. А только что не обновлял. Что за хрень? Как такое может быть?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Command execute row count

Сообщение ElisDN »

Если строке 2 там уже было 456 перед when 2 than 456, то эту строку пропустит как неизменившуюся.
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Command execute row count

Сообщение Brainfuck »

ElisDN писал(а): 2019.02.19, 17:48 Если строке 2 там уже было 456 перед when 2 than 456, то эту строку пропустит как неизменившуюся.
СЕРЬЕЗНО??! Это неожиданно... Он не обновляет если значение совпадает? Тогда все понятно. Спасибо. Не знал.
Ответить