SQL查询当前数据上一条和下一条的数据以实现获取文章上下篇文章信息



SQL查询当前数据上一条和下一条的数据以实现获取文章上下篇文章信息

项目中需要实现获取当前文章的的上一篇文章和下一篇文章,以实现较好的站内链接跳转。具体实现方式其实就是使用SQL查询当前数据的上一条和下一条关联数据。

这里假设有一张员工表,有三个字段 (ID,员工姓名,年龄):

表结构:

--由于作为测试表,只有两个字段,主要是自动增长标识ID和文章标题
--下面看下具体实现的SQL语句。
CREATE TABLE [dbo].[Article](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](150) NULL
)

获取上一条数据:

SELECT TOP(1) ID,Title FROM [Article] WHERE ID<@CurrentId ORDER BY ID DESC

获取下一条数据:

SELECT TOP(1) ID,Title FROM [Article] WHERE ID>@CurrentId ORDER BY ID ASC

原理说明:

@CurrentId表示当前文章的ID,假设当前文章的ID是500,那么上一篇文章的ID应该是501,下一篇文章ID则是502。
这两条SQL语句的原理分析如下:

1、第一步在WHERE条件中过滤掉数据。

要获取当前数据的上一条数据就要排除掉ID比当前ID大的。


假设当前ID是500,那么只要获取ID为499、498和497以上的数据,而要过滤掉ID为501、502和503以下的数据。

同理要获取下一条数据或下一篇文章数据就要过滤排除掉ID比当前ID小的。

2、第二部要做的是精确获取当前数据的上下关联数据。

上一步骤已经获取了所有ID比当前ID小的数据,那么我们只要将这些数据降序排序下,然后取第一条数据就是当前数据的上一条数据。

而获取下一条关联数据则相反,我们获取到的数据都是比当前ID大的,所以我们要升序排序,然后获取第一条数据才是当前数据的下一条数据。


作者:十有三

出处:http://shiyousan.com/post/0d3a0db7-3cae-486f-b5b5-a0b1ad118be3

欢迎转载本文,本文版权归作者所有,转载请声明出处或保留此段声明。^_^请尊重他人劳动成果,共建美好的网络环境。