我在我的网站上正在构建一个博客文章详细页面,该页面将显示类似于typepad博客文章的“上一篇”和“下一篇”链接。请参见以下示例。
我想知道是否有一种查询数据库的方法可以实现像下面这张图片一样的功能,它选择了“当前”记录(黄色),但也选择了按PublishDate排序时的前后记录(绿色)。
另外,为了澄清,我正在使用的数据库表具有唯一的发布日期。很抱歉示例图片显示了多个具有相同PublishDate的记录。
![alt text](https://content.screencast.com/users/jessegavin/folders/Jing/media/09475b53-8d72-4d8f-8c27-8b959d6be9b0/2010-05-10_1315.png)
![alt text](https://content.screencast.com/users/jessegavin/folders/Jing/media/57728c35-d459-4eed-9b05-a2877fa80cf7/2010-05-10_1323.png)
你不能像物理上的“前一个”、“后一个”那样在SQL中使用。你需要在已排序的查询结果中找到比当前结果更大的下一个结果,例如按日期排序。这意味着你需要通过"ORDER BY"语句对结果进行排序和过滤。
With OrderedPosts As
(
Select ...
, ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
From ..
Where ...
)
Select
From OrderedPosts
Where ItemRank = @ItemNumber
With OrderedPosts As
(
Select ...
, ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
From ..
Where ...
)
Select
From OrderedPosts
Where ItemRank Between (@ItemNumber - 1) And (@ItemNumber + 1)
abc.com/post.aspx?id={guid}
,然后假设用户从Google结果进入该页面,那么我如何找到@ItemNumber? - jessegavinWith OrderedPosts As
(
Select Id
, Title
, PublishDate
, ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
From Posts
)
Select top 3 *
From OrderedPosts
Where ItemRank > (select ItemRank from OrderedPosts where Id = @Id) - 2
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx
希望这能帮到你。