我经常面临这个问题,作为Oracle用户,使用MySql。
出现以下情况:
目标是更新具有相应value
的表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
答案 0 :(得分:2)
以下是使用一个查询执行此操作的一种方法。它不是最漂亮格式的查询,但它只是一个。
<?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。