项目中需要实现获取当前文章的的上一篇文章和下一篇文章,以实现较好的站内链接跳转。具体实现方式其实就是使用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大的,所以我们要升序排序,然后获取第一条数据才是当前数据的下一条数据。
作者:十有三
出处:https://shiyousan.com/post/0d3a0db7-3cae-486f-b5b5-a0b1ad118be3
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。