我需要执行以下查询,但是将使用预准备语句。请注意,WHERE子句的数量将根据发送到服务器的数据而更改。
UPDATE bla SET x=123
WHERE (y=4 AND z=3)
OR (y=12 AND z=13)
OR (y=13 AND z=13)
OR (y=25 AND z=23)
OR (y=37 AND z=33)
OR (y=39 AND z=13)
OR (y=44 AND z=23)
OR (y=54 AND z=33)
OR (y=84 AND z=23)
OR (y=94 AND z=23)
OR (y=99 AND z=33);
我可以生成以下任一数组:
$arr=[12,13,13,13,25,23,27,33,39,13,44,23,54,33,83,23,94,23,99,33];
或
$arr=[[12,13],[13,13],[25,23],[37,33],[39,13],[44,23],[54,33],[84,23],[94,23],[99,33]];
最好是使用单个UPDATE查询执行此操作,还是对每个查询执行10次UPDATE查询?
如果单个查询,最好的方法是什么?
答案 0 :(得分:2)
使用implode
和array_map
构建的单个查询来执行此操作。
$where = implode(' OR ', array_map(function($e) {
return "(y = $e[0] AND z = $e[1])";
}, $arr);
$sql = "UPDATE bla SET x = 123 WHERE $where";
答案 1 :(得分:1)
在MySql中,您可以进行元组比较。
所以你可以做这样的事情
UPDATE bla
SET x=123
WHERE (x,y) in ((12,13),(13,13),(25,23),(37,33),(39,13),(44,23),(54,33),(84,23),(94,23),(99,33))