php – 批量更新ID列表中的值列表

我经常面对这个问题,作为Oracle用户,玩
MySql.

是以下情况:

>一个id列表(1,2,3,…,n)
>值列表(‘val1′,’val2′,’val3′,…,’valn’)[值显然与这些值完全不同]
>之前的2个列表已通过订购.这意味着首先传递的值对应于首先传递的id.

目标是更新具有相应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.

点赞