修改订单字段

时间:2016-02-26 19:31:21

标签: mysql

我有一张这样的表

+----+-------+---------+
| id |order  | name    |
+----+-------+---------+
| 1  | 2     | John    |
| 2  | 1     | William |
| 3  | 4     | Karl    |
| 4  | 3     | Michael |
+----+-------+---------+

我想把卡尔从第四位移到第二位,所以卡尔的订单区域将设置为2,约翰3和迈克尔4。

有没有办法只用一个查询来更新表?

3 个答案:

答案 0 :(得分:1)

您可以尝试条件更新:

UPDATE mytable
SET myfield = CASE other_field
    WHEN 1 THEN 'value1'
    WHEN 2 THEN 'value2'
    WHEN 3 THEN 'value3'
END
WHERE id IN (1,2,3)

答案 1 :(得分:0)

如果你知道卡尔已经排在第四位,并且你知道他已经,那么这应该是这样的:

UPDATE mytable
SET order = (order - 1) % 3 + 2
WHERE ORDER BETWEEN 2 AND 4

对于更可重复使用的查询,如果有人从位置B移动到列表中的位置A(A< B),则执行此操作(用A和B替换实数):

UPDATE mytable
SET order = (order - A + 1) % (B - A + 1) + A
WHERE ORDER BETWEEN A AND B

如果您想将某人从列表中移出,从位置A到B,请执行以下操作:

UPDATE mytable
SET order = (order - A - 1) % (B - A + 1) + A
WHERE ORDER BETWEEN A AND B

中间的每个人都会得到适当的更新。

答案 2 :(得分:0)

感谢您的回答。

他们帮我提出一个查询,将订单字段从任意位置A更新到任何位置B:

UPDATE mytable
SET order=MOD(order-LEAST(A,B)+SIGN(A-B),GREATEST(A,B)-LEAST(A,B)+1)+LEAST(A,B)
WHERE order BETWEEN LEAST(A,B) AND GREATEST(A,B)