我有一张这样的表
+----+-------+---------+
| id |order | name |
+----+-------+---------+
| 1 | 2 | John |
| 2 | 1 | William |
| 3 | 4 | Karl |
| 4 | 3 | Michael |
+----+-------+---------+
我想把卡尔从第四位移到第二位,所以卡尔的订单区域将设置为2,约翰3和迈克尔4。
有没有办法只用一个查询来更新表?
答案 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)