php - (Mysql - 批量更新

标签 php sql mysql

嘿,我有一个包含“id”、“name”和“weight”列的表。权重是一个无符号的小整数。

我有一个页面显示按“重量 ASC”排序的项目。它将使用拖放操作,一旦更改顺序,将传递一个以逗号分隔的 ID 字符串(以新顺序)。

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

示例输入:

5,6,2,9,10,4,8,1,3,7

示例 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++;
}
?>

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

最佳答案

您可以创建一个包含新数据的临时表(即,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;

因此,您有一个创建语句、一个插入语句和一个更新语句。

关于php - (Mysql - 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429441/

相关文章:

SQL数据库设计

mysql - 加入日期以查找活跃用户

mysql - 如何获取 MySQL 中外表的最大日期并仅返回包含该数据的行而不混合记录?

Mysql 根据多列选择唯一记录并仅显示组和总金额

php - PHP 中 return 、 echo 和 print 关键字之间的区别

php - "php script"/"mysql update"动态调度

mysql - 用户和组 : 3 or 2 tables (SQL)

php - 当子查询中存在空值时,Mysql 不返回任何值

javascript - Ajax卡在beforeSend阶段,不向PHP发送数据

mysql - 按价格对数量进行分组