Пример кода:
UPDATE tbl_country SET price = CASE
WHEN code = 1 THEN 123;
WHEN code = 2 THEN 456;
…
END
WHERE code IN (1,2,…)
AND id = 222
Распространённым советом является не использовать подобные конструкции в силу их неэффективности, а выполнять обновление через одну команду в наборе команд транзкакции, например, здесь.
Прошу объяснить, будет ли эффективней составить список последовательных UPDATE через запятую, например, так:
$query =
"UPDATE tbl_country SET price = 123 WHERE code = 1 AND id = 222;
UPDATE tbl_country SET price = 456 WHERE code = 2 AND id = 222;
...
";
UPD:
Ответом на вопросы о произодительности оказался этот топик, в частности, этот ответ.
Запросы очень разные. В первом не указано условие where и возможно обновляются все записи, во втором выборка осуществляется скорее всего по первичному ключу и обновляются 3 записи. Сложно понять чего вы хотите сделать, но дам вам несколько советов.
В общем случае в case нет ничего неэффективного, так как он будет работать с уже выбранными строками и если вам надо смапить одни значения на другие, то используйте его.
Чтобы делать предположения об эффективности изучите работу explain, и научитесь профилировать своё приложение.
Избегайте преждевременной оптимизации. В случае, когда надо обновить значения в таблице один раз (раз в полгода решили заменить test на testing) эффективность не так уж и важна.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости