(我的)SQL - 批量更新

Mat*_*att 1 php mysql sql

嘿,我有一个带有"id","name"和"weight"列的表.权重是无符号的小int.

我有一个页面显示按"重量ASC"排序的项目.它将使用drag-n-drop,一旦订单被更改,将传递逗号分隔的id字符串(按新顺序).

假设该表中有10个项目.这是我到目前为止所拥有的:

样本输入:

5,6,2,9,10,4,8,1,3,7
Run Code Online (Sandbox Code Playgroud)

示例PHP处理程序(排除错误处理程序和安全性):

<?php
$weight = 0;
$id_array = explode(',', $id_string);

foreach ($id_array as $key => $val)
{
    mysql_query("UPDATE tbl SET weight = '$weight' where id = '$val' LIMIT 1");
    $weight++;
}
?>
Run Code Online (Sandbox Code Playgroud)

当我对列顺序进行更改时,我的脚本是否需要进行10次单独的UPDATE查询,还是有更好的方法?

joe*_*ice 8

您可以创建一个包含新数据的临时表(即id和weight是列),然后使用此数据更新表.

create temporary table t (id int, weight float);

insert into t(id, weight) values (1, 1.0), (2, 27), etc

update tbl inner join t on t.id = tbl.id
set tbl.weight = t.weight;
Run Code Online (Sandbox Code Playgroud)

因此,您有一个create语句,一个insert语句和一个update语句.