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

时间:2010-08-18 16:37:36

标签: mysql optimization sorting

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

我的数组以:[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次更新...

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

杰里

2 个答案:

答案 0 :(得分:2)

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

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。如果你没有那个,它会将其他所有内容都设置为空白!

答案 1 :(得分:0)

实际上并非如此,因为您必须更新指定picID的每一行。您必须发出20个更新命令。如果不想发出大SQL命令,这似乎是处理这种情况的最有效方法。