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