• 在多排序条件下SQL获文章上一条、下一条记录


            在我们开发CMS系统的时候经常会碰到需要根据当前记录来读取它的上一条记录或下一条记录的现像。单字段排序时SQL语句非常简单,但是当以多字段排序时应该怎么写呢?实际上也复杂,多字段无法搞定那么我们就需要将多个字段合并在一起,形成一个固定长度的字符串,再将这个生成的字符串做为排序字段进行排序。注意,这个排序字符串的长度一定要是固定的,所有记录生成的排序字符串长度一至才能准确进行排序。

    表结构:

    CREATE TABLE [table1](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Name] [varchar](50) NOT NULL,
        [Sort] [int] NOT NULL,
        [CreatedOn] [datetime] NOT NULL,
    CONSTRAINT [PK_table1] PRIMARY KEY 
    (
        [Id] ASC
    ) ON [PRIMARY]

            在这个表中Id是主键,我们用Id做为条件来查询当前记录,以Sort和CreatedOn两个字段做为排序字段。Sort是数字型值为1-9999,因为它的最大值是四位数9999,为了保证我们生成的字符串长度是一至的,所以我们把它转换生成一个5位的字符串。如:10000+1=10001、10000+9999=19999。

    上一条:

    SELECT 
         top 1 *,(convert(varchar,10000 + sort) + convert(varchar,createdOn,120)) as a1
    FROM 
        table1 
    WHERE 
        (convert(varchar,10000 + sort)+ convert(varchar,createdOn,120)) < (select a1=(convert(varchar,10000 + sort)+ convert(varchar,createdOn,120)) from table1 where id=5) 
    order by a1 desc;

    下一条:

    SELECT 
        TOP 1 *,(convert(varchar,10000 + sort) + convert(varchar,createdOn,120)) as a1
     FROM 
    table1
    WHERE
    (
    convert(varchar,10000 + sort) + convert(varchar,createdOn,120)) > (select a1=(convert(varchar,10000 + sort) + convert(varchar,createdOn,120)) from table1 where id=2)
    order by a1 asc;
  • 相关阅读:
    Google基本利用
    sqlmap
    kali中wireshark打开后错误
    Python Flask Jinja2模板引擎
    Python Flask学习
    Python 豆瓣日记爬取
    Python 函数装饰器
    Python 生成器
    ss源码学习--从协议建立到完成一次代理请求
    ss源码学习--工作流程
  • 原文地址:https://www.cnblogs.com/lswweb/p/4200443.html
Copyright © 2020-2023  润新知