【发布时间】:2011-06-25 00:02:14
【问题描述】:
我有一个表,tblTags,它的工作方式与 StackOverflows 标记系统大致相同。
当我查看标签页面时,假设标签Tutorial 我想按字母顺序显示其前后的 10 个标签。
因此,如果我们给定了 ID 30 的标签 Tutorial,我们如何返回一个类似以下顺序的记录集:
Tap
Tart
> Tutorial
Umbrellas
Unicorns
Xylaphones
我认为这样做很糟糕,因为它们涉及检索大量数据。
我不确定是否可以按照(伪)的方式做一些事情:
SELECT RANGE(0 - 30) FROM tblTags ORDER BY Name ASC
但是如何在不遍历整个列表直到找到它的情况下,高效地知道教程标签在列表中的位置呢?
我正在使用带有 LINQ 的 SQL Server 2008 R2 Express,如果它有任何不同,SQL 查询或 LINQ 将是很好的答案,谢谢!
【问题讨论】:
-
@Teo.sk 我们知道 ID 和名称
-
@Teo.sk BETWEEN 看起来不错!但我需要确保它保证获取合理数量的记录,根据标签的数量/类型,可能返回太多或太少
-
我认为下面的联合解决方案会根据您的表格大小给出良好的结果。英语的单词少于 200K,所以我不会想象您的表格会如此之大以至于大小会影响性能(除非您允许部分单词作为标签)。同时为您的姓名列编制索引以获得最佳性能。
-
@Cordsen,谢谢,在其他答案的帮助下,我设法制作了一个有效的 linq 解决方案!
标签: sql linq sql-server-2008