我有一个像这样的有序数据表
ID ORDER
12 1
13 2
14 3
15 4
...
200 189
201 190
...
我希望能够更新他们的几个或所有“订单”。 我该怎么办?
例如,我可能会在ID = 12和ID = 13之间切换顺序,所以它就像
ID ORDER
12 2
13 1
14 3
15 4
...
这只是一个简单的UPDATE TABLE SET ORDER=1 WHERE ID=13 SET ORDER=2 WHERE ID=12
但如果我想将ID = 200一直移到顶部,那么......
ID ORDER
12 2
13 3
14 4
15 5
...
200 190
201 1
...
然后一切都要更新..?我怎么做?有没有更好的办法?小数?
编辑:我正在使用MSSQL btw
编辑:使用说明:我有一个包含很长URL链接列表的表,这些链接的顺序很重要。我希望能够重新排列他们的订单。我有一个网页,从数据库中检索该列表,显示名称作为无序列表,我可以重新排列该列表上的项目。我坚持如何将新订购的清单的订单更新到数据库中。
答案 0 :(得分:3)
要将Id 200移到顶部,您必须执行以下操作:
1)获取在Id 200之前订购的所有商品并将订单增加1
update MyTable
set Order = Order + 1
where Order < (select Order from MyTable where Id = 200)
2)将Id 200放在列表顶部(Order = 1)
update MyTable
set Order = 1
where Id = 200
答案 1 :(得分:3)
如果您想将项目移到顶部,并在单个参数中更新所有其他项目的顺序,您可以执行以下操作:
UPDATE MyTable
SET Order = (CASE Order WHEN 190 THEN 1
ELSE Order + 1
END)
WHERE Order BETWEEN 1 AND 190
答案 2 :(得分:1)
我想,你在看什么
Select * from TableName order by ID Desc/Asc
您想订购行Ascending
或Descending
答案 3 :(得分:1)
我认为上述问题并不能解决问题。我相信你的问题的答案是你已经怀疑的 - 要将order = 200更改为order = 1,你必须重新调整其他每个值,或使用带小数的数字格式。
然而,我强烈怀疑如果你详细说明为什么你需要这样做,我们可以使用一些更好的推荐方法。