想象一下,我想通过用下一个或上一个项目替换它的顺序来重新排序(更改位置或顺序)菜单中的一个项目。为此,我使用如下代码:
DECLARE @SO tinyint --, @MenuID uniqueidentifier
--SET @MenuID = (Select top 1 MenuID from MenuItems where MenuItemID = @ID)
SET @SO = (Select top 1 SO from MenuItems where MenuItemID = @ID and MenuID = @MenuID)
if @SO > 1
begin
UPDATE dbo.MenuItems SET SO = @SO WHERE MenuItemID = (select top 1 MenuItemID from MenuItems WHERE SO = @SO - 1 and MenuID = @MenuID)
UPDATE dbo.MenuItems SET SO = @SO - 1 WHERE MenuItemID = @ID
END
此代码每次向上或向下移动一次都可以正常工作。我有两个问题:
- 有没有更好的解决方案来做到这一点?
- 如果我想同时将一些项目移动到更高或更低的一些步骤怎么办,像这样:?
从:
> 1
> 2
> 1
> 2
> 3
> 3
> 4
> a
> b
> 5
至:
> 1
> 2
> 1
> 2
? a
? 5
> 3
> 3
> 4
> b
谢谢,卡多