Я часто сталкиваюсь с этой проблемой, как пользователь Oracle, играя с MySql.
Будьте в следующей ситуации:
Цель состоит в том, чтобы обновить все value
таблицы, имеющее соответствующий id
: val1 должен обновить id 1, val2 должен обновить id 2 и т. Д. В только ОДНОМ запросе.
Простое решение – обновить n раз:
UPDATE `value` SET `value`='val1' WHERE id = 1; UPDATE `value` SET `value`='val2' WHERE id = 2; UPDATE `value` SET `value`='val3' WHERE id = 3; ... UPDATE `value` SET `value`='valn' WHERE id = n;
Но мне бы хотелось, чтобы все это обновлялось.
sqlfiddle немного поиграть: http://sqlfiddle.com/#!2/d02e8
Вот один из способов сделать это, используя один запрос. Это не будет самый красивый формат, но он будет только одним.
<?php $id_list = implode(',', $ids); $whens = implode( "\n ", array_map( function ($id, $value) { return "WHEN {$id} THEN {$value}"; }, $ids, $values ) ); $sql = " UPDATE value SET value = CASE id {$whens} END WHERE id IN ({$id_list}) "; ?>
См. Мой измененный SQLFiddle .