MySQL多重更新保持IN子句的顺序

时间:2014-11-27 12:52:13

标签: mysql sql-update

我想以这种方式更新MySQL表中预先计算的项目顺序

SET @order_item := 1;
UPDATE item
SET item_order := (@order_item := @order_item + 1)
WHERE
id IN (8,2,1,10);

我的预期结果是:

id, item_order
8,  1
2,  2
1,  3
10, 4

但是当MySQL使用id中的PRIMARY KEY索引来执行更新时,我得到:

id, item_order
1,  1
2,  3
8,  3
10, 4

我想知道你们是否知道解决这个问题的任何解决方法,并在一次更新中使用索引保持MySQL。我碰巧通过在PHP bucle中执行大量更新来实现它。想法?

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试这样订购。

SET @order_item := 1;
UPDATE item
SET item_order := (@order_item := @order_item + 1)
WHERE
id IN (8,2,1,10)
order by FIELD(id,8,2,1,10);

答案 1 :(得分:0)

您可以在ORDER BY查询中附加UPDATE子句,告诉MySQL您希望它处理行的顺序。当然,您需要能够使用相同的SELECT子句以所需顺序ORDER BY行。

但我猜这个顺序正是你想要达到的目标: - (