2016-02-26 48 views
0

我有這樣修改訂單場

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

我想從第四位移至卡爾到第二卡爾這樣的順序字段將被設置爲2,約翰福音3和邁克爾4

有沒有辦法更新只有一個查詢表?

回答

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 

和之間將適當更新大家。

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) 
0

謝謝你的回答。

他們幫我拿出從任何位置上更新訂單場任何位置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) 
+0

我做了一些測試,它的工作,但不是所有的工作時間。我改成了三個查詢來完成這項工作。 –