3
比方說,我有這個表:SQL:如何更改行順序位置
ID Name position
11 Kate 1
12 Frank 2
13 Anna 3
14 Peter 4
15 James 5
16 Michael 6
給出當前ID和目標位置,我需要拿出重新排序它的有效方式。
我想到了混合一點SQL與我的服務器端語言,例如。 (向上移動弗蘭克):
if (newPosition > oldPosition) {
UPDATE people SET position = position - 1 WHERE listId = 1 AND position <= @newPosition AND Name != "Frank";
UPDATE people SET position = @newPos WHERE listId = 1 AND Name="Frank";
} else {
…
}
其中一個問題是,如果當前位置爲0,它將變爲負值。
有關如何重新排序行的任何想法?
編輯:作爲我想要做的一個例子,假設我想將弗蘭克(位置= 2)向下移動到彼得(位置= 4)和詹姆斯(位置= 6)之間,所以理想情況下,表應該看起來像這樣:
ID Name position
11 Kate 1
13 Anna 2
14 Peter 3
12 Frank 4
15 James 5
16 Michael 6
感謝您的回覆。 假設我想在彼得(位置= 4)和詹姆斯(位置= 6)之間移動弗蘭克(位置= 2)。此更新聲明似乎將弗蘭克的立場改變爲4(與詹姆斯相同),並且沒有人在第2位之後。 – Cornwell
@Cornwell你爲'oldPosition'和'newPosition'使用了什麼值? – shawnt00
oldPosition = 2; newPosition = 4 – Cornwell