mysql - 使用 x=x+1 值更新 mysql 中的 20 行?

标签 mysql optimization sorting

在 mysql 中,我有一个大约有 20 行的表(示例)。我想将排序顺序(它在携带 picID 的数组中)从 1 到 x(x 是本例中的项目数 x=20)写入 SORT 列。

我的数组开始于:[10,15,1...]

我能做到:

UPDATE table SET sort=1 WHERE picID=10
UPDATE table SET sort=2 WHERE picID=15
UPDATE table SET sort=3 WHERE picID=1

...

直到 20...

但这对 mysql 表进行了 20 次更新...

有没有可能以更有效的方式做到这一点?

杰瑞

最佳答案

处理这个问题的一种方法是使用临时表:

CREATE TABLE tmp_sort (id INT, sort_order INT);
INSERT INTO tmp_sort VALUES (10, 1), (15, 2), (1,3);

UPDATE table, tmp_sort 
   SET table.sort = tmp_sort.sort_order 
 WHERE tmp_sort.id = table.picID;

另一种使用控制流的方式:

UPDATE table 
   SET sort = CASE picID
  WHEN 10 THEN 1
  WHEN 15 THEN 2
  WHEN 1  THEN 3
  ELSE sort END

注意末尾的 ELSE。如果你没有它,它会将其他所有内容设置为空白!

关于mysql - 使用 x=x+1 值更新 mysql 中的 20 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3514401/

相关文章:

mysql - MySQL查询中的复杂算法

MySQL DMG 中缺少 MySQLStartupItem.pkg

MySQL:查询并连接两个表

javascript - 我该如何优化这个 switch 语句?

ruby-on-rails - Rail 片段缓存如何使您的应用程序受益,即防止数据库调用?

cocoa - 对 NSArray 进行排序

php - 在定义的时间段后设置数据库表中的列

python - scipy 中的旅行商

java - 比较器工作方式的效率

arrays - Elasticsearch中的排序数组类型