使用具有多个 WHERE 条件的准备语句更新查询
UPDATE query using prepared statement with multiple WHERE conditions
我需要执行以下查询,但将使用准备好的语句。请注意,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]];
最好是用单个更新查询来执行此操作,还是对每对执行 10 个更新查询?
如果是单个查询,最好的方法是什么?
使用 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";
在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))
我需要执行以下查询,但将使用准备好的语句。请注意,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]];
最好是用单个更新查询来执行此操作,还是对每对执行 10 个更新查询?
如果是单个查询,最好的方法是什么?
使用 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";
在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))