【发布时间】:2011-12-22 17:58:43
【问题描述】:
假设我在购物网站的数据库中有一个Product 表来保存商店产品的描述、价格等。让我的客户能够重新订购这些产品的最有效方法是什么?
我创建了一个Order 列(整数)用于对记录进行排序,但这让我在性能方面有些头疼,因为我使用原始方法来更改我实际需要更改的每条记录之后的顺序。一个例子:
Id Order
5 3
8 1
26 2
32 5
120 4
现在我该怎么做才能将 ID=26 的记录顺序更改为 3?
我所做的是创建一个程序来检查目标顺序 (3) 中是否有记录,如果没有则更新行的顺序 (ID=26)。如果目标顺序中有一条记录,则该过程会自行执行,并以target order + 1 作为参数发送该行的ID。
这会导致在我想要更改以腾出空间之后更新每条记录:
Id Order
5 4
8 1
26 3
32 6
120 5
那么聪明的人会怎么做呢?
- 我使用 SQL Server 2008 R2。
编辑:
我需要一个项目的 order 列足以进行排序,而不涉及辅助键。单独的订单列必须为其记录指定一个唯一的位置。
除此之外,我想知道是否可以实现类似链接列表的功能:使用“下一个”列而不是“订单”列来保留下一个项目的 ID。但我不知道如何编写以正确顺序检索记录的查询。如果有人也对这种方法有想法,请分享。
【问题讨论】:
-
更有经验的人不会调用列
Order,因为这已经是 SQL 中的保留关键字 .... :-)
标签: sql-server database sorting