gpt4 book ai didi

mysql - SQL:如何更改行顺序位置

转载 作者:可可西里 更新时间:2023-11-01 07:34:16 26 4
gpt4 key购买 nike

假设我有这张表:

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,它将变为负值。

关于如何重新排列行的任何想法?

编辑:作为我正在尝试做的事情的一个例子,假设我想将 Frank(位置 = 2)向下移动到 Peter(位置 = 4)和 James(位置 = 6)之间,因此理想情况下,表格应如下所示:

ID     Name    position
11 Kate 1
13 Anna 2
14 Peter 3
12 Frank 4
15 James 5
16 Michael 6

最佳答案

我不完全清楚您打算如何进行重新排序操作。这是你的想法吗?

update T
set position =
case
when newPosition > oldPosition then
case when position = least(oldPosition, newPosition)
then newPosition else position - 1 end
else /* newPosition < oldPosition */
case when position = greatest(oldPosition, newPosition)
then newPosition else position + 1 end
end
where position between
least(oldPosition, newPosition)
and greatest(oldPosition, newPosition)
and oldPosition <> newPosition

关于mysql - SQL:如何更改行顺序位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com