如何解决SQL Server数据库中的排序列表
| 我想知道是否有可能/在数据库中维护一个排序列表。 例如,我有一个优先级为1〜100的项目列表。每次插入时,数据库都可以将其插入适当的位置,这样,当我调用.select(20)
时,数据库可以向我返回优先级最高的前20个项目。
解决方法
添加一个称为优先级的字段。适当地填充数据并对其进行排序,然后根据您的数据库选择前20位,例如
SELECT TOP 20 [Your fields here]
FROM table
ORDER BY priority
要么
SELECT [Your fields here]
FROM table
ORDER BY priority
LIMIT 20
为该字段添加索引可能也是一个好主意。
这是一个非常持久的解决方案。利用行实际存储在表中的顺序的任何其他解决方案都将非常脆弱。
, 我想知道是否有可能/好
维护数据库中的排序列表。
请参阅@Conrad Frix的答案以发现确实可行(使用窗口函数ROW_NUMBER()
是另一种方法,该方法的优点是成为标准SQL并在SQL Server中受支持)。请注意,这会向表中添加一列(如果需要的话,为relvar的属性),这不是\'sorted list \',但似乎是您所需要的。
是个好主意吗?显然,如果这对您的应用程序/企业是必需的,那么在数据库中维护这些值确实是适当的。
每次插入时,数据库都可以
将其插入正确的位置
请注意,如果您有100行具有唯一的priority
属性值1-100,并且需要将value5ѭ值设置为priority = 55
,则现有值55-100将需要加1,并且数据库不会为您这样做除非您已经在数据库对象中编写了过程代码(例如触发器)。如果您只需要管理ѭ5not(而不是UPDATE
或a9 bes),那么更好的方法可能是以更大的差距开始,例如您最初的100行可能有priority
个值1000、2000、3000,... 100000。现在,与以前相同的“ 5”可以通过将属性分配为“ 12”而在54000和55000之间进行,而无需重新分配任何值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。