在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次更新...
是否有可能以更有效的方式做到这一点?
杰里
答案 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命令,这似乎是处理这种情况的最有效方法。