如何在SQL中选择“上一个”和“下一个”记录?

时间:2010-05-10 18:31:29

标签: sql sql-server pagination

我正在我的网站上构建一个博客帖子详细信息页面,该页面将显示一个“上一个”和“下一个”链接,类似于typepad博文的工作方式。见下面的例子。 alt text

我想知道是否有办法查询数据库,它完成了下面的图像,它选择了“当前”记录(黄色)进行显示,但也选择了下一个和以前的记录(绿色)按PublishDate排序。

alt text

另外,为了澄清,我正在使用的数据库表具有唯一的发布日期。很抱歉,示例图像显示了具有相同PublishDate的多个记录。

3 个答案:

答案 0 :(得分:11)

你不这样做。 SQL没有先前的下一个概念。你基本上要求在你已经拥有的那个之后的有序查询中的下一个前1(例如按日期)。这意味着您需要/通过订单(按语句排序)进行过滤。

答案 1 :(得分:4)

您需要一种订购帖子的方法。如果你有,那么你可以在SQL Server 2005+中执行类似下面的操作,在那里传入你想要的项目编号:

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)

答案 2 :(得分:0)