我有一个看起来像这样的数组:
array(
[0] => 1
[1] => 2
[2] => 4
[3] => 3
)
目前,我正在遍历数组并按照
的顺序运行单个更新foreach($array as $position => $id){
//query = update users set order = ($position+1) where id = $id
}
显然不是实际的代码,但它得到了重点,
如果我的列表中有1000个项目,那就是1000个查询,
我想知道是否有办法在一个查询中执行此操作?
答案 0 :(得分:3)
您可以使用MySQL案例陈述。我不确定它是否会更快或更快,但这是它的工作方式:
$query = 'UPDATE users SET order = CASE id ';
foreach($array as $position => $id) {
$query .= 'WHEN '.$id.' THEN "'.($position+1).'" ';
}
$query .= 'ELSE order ENDCASE'; // leave order the same if the id doesn't match the array
// run $query...
答案 1 :(得分:0)
实际上是可能的。 您可以使用循环来构建查询字符串以适合此example
然后执行您的查询;)
答案 2 :(得分:0)
假设id
是主键或唯一键,您可以这样做:
$tmp = Array();
foreach($array as $position=>$id) {
$tmp[] = "(".$id.",".($position+1).")";
}
$query = "INSERT INTO users (id,order) VALUES ".implode(",",$tmp)
." ON DUPLICATE KEY UPDATE order=VALUES(order)";
答案 3 :(得分:0)
使用“in”运算符 - 更新用户设置order =($ position + 1),其中id为