微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 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

解决方法:

我不太清楚你打算如何重新排序操作.这是你的想法吗?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐