我想以这种方式更新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中执行大量更新来实现它。想法?
谢谢!
答案 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
行。
但我猜这个顺序正是你想要达到的目标: - (