在多排序条件下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 *
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)
时间: 2024-10-13 20:34:26

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

Linux下使用shell实现上传linux下某个目录下所有文件到ftp

首先我们需要搞清楚单个文件怎么上传,把这个单文件上传到ftp上的实现命名为一个:upload_to_ftp_command.sh 之后,需要弄清楚怎么实现遍历一个目录下的所有文件的,把这个遍历某个目录下的文件实现命名为:foeach_directory_and_uploadfile_to_ftp.sh. upload_to_ftp_command.sh #!/bin/bash FTILE_NAME=$1 ftp -n <<- EOF open 100.170.141.26 user jy ne

Swift环境下实现UILabel居上 居中 居下对齐

首先在Xcode中新建.h文件,将下面代码复制进去 // // myUILabel.h // // // Created by yexiaozi_007 on 3/4/13. // Copyright (c) 2013 yexiaozi_007. All rights reserved. // #import <UIKit/UIKit.h> typedef enum { VerticalAlignmentTop = 0, // default VerticalAlignmentMiddle,

【重磅干货】看了此文,Oracle SQL优化文章不必再看!

听“俊”一席话,胜读十年书.看了这篇由DBA+社群联合发起人丁俊大师(网名:dingjun123)分享的SQL优化大作,其他Oracle SQL优化文章都不必再看了! 专家简介 丁俊 网名:dingjun123 DBA+社群联合发起人 性能优化专家,Oracle ACEA,ITPUB开发版资深版主.8年电信行业从业经验,在某大型电信系统提供商工作7年,任资深工程师,从事过系统开发与维护.业务架构和数据分析.系统优化等工作.擅长基于ORACLE的系统优化,精通SQL.PL/SQL.JAVA等.电子

Centos7.3 下SQL Server 备份及还原的两种方式

Centos7.3 下SQL Server 备份及还原的两种方式 我们前面两篇文章介绍了Centos7.3下SQL Server的安装配置及使用Powershell的管理介绍,今天我们接着介绍如何实现Centos7.3 下SQL Server  备份及还原,有两种方式:1.使用SSMS备份及还原,该方式最为简单也最方便操作的方式,2.使用Linux下SQL Server自带功能命令备份,具体见下: 我们上一篇中创建了一个测试数据库,我们接着拿这个数据库进行测试,我们首先使用第一种方式,使用SSM

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连

sql server服务器sqlserver远程连接数据库防火墙在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导 致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 为什么.我已经在SQL的外围配置设置中把他的

WordPress直接访问数据库列出指定分类目录下的所有文章

我的问题是:在我迁移wordpress数据库文件的时候,发现网站下所有的文章都没有了分类,查了许久才发现原来是数据库里面少了个关联分类与文章的表,也就是wp_term_relationships表.重新导入问题解决.其中这篇文章给我启发.在此收藏一下. 中需要实现根据分类目录ID获取该分类目录下所有文章的功能.如果用Wordpress自带的函数当然非常简单,但由于笔者对主题开发不甚熟悉,因此用纯PHP脚本直接访问数据库实现了该功能. 首先,介绍一下Wordpress数据库中的几个表: 文章表--

给object数组进行排序(排序条件是每个元素对象的属性个数)

从汤姆大叔的博客里看到了6个基础题目:本篇是第3题 - 给object数组进行排序(排序条件是每个元素对象的属性个数) 解题关键: 1.Array.sort的用法 2.object的属性数量的统计 解点1:Array.sort的用法 Array.sort可以为数组指定一个排序规则,一般用如下格式进行指定,代码如下: var arr = [10,6,0,4]; console.log( arr.sort() ); //按字符排序 0,10,4,6 console.log( arr.sort( fu

PL/SQL在win7/win8 x64位下使用客户端连接oracle

新做了win8 x64位的系统.需要使用plsql连接oracle数据库.之前的机器装有64位的oracle11g,plsql可以直接找到oracle_home连接到数据库. 这次不想在本地安装数据库,因此只装了一个32位的数据库客户端.配置环境变量时遇到一些小问题,在此记录下来. 1.下载oracle客户端,然后解压到任意目录下 2.安装好plsql,然后配置plsql的oracle_home和oci库的地址 plsql的preference设置 ORACLE_HOME:F:\oracle\p

ORACLE11g下如何利用SQL DEVELOPER连接上数据库?

最近在学习数据库的相关内容,在sqlplus敲了几天命令行窗口后,想尝试一下用sql developer 连接上数据库但一直没有实现.在网上查询了相关资料后现在终于弄好了,就来写下此篇博文与大家分享!接下来给大家分步骤介绍. 1.打开sql developer后配置java.exe路径.这点装过ecilipse的应该都很熟悉了,在此就不细说了.如果不记得自己java环境的安装路径推荐大家可以下载everything这款window下非常好用的文件搜索软件. 2.打开后我们就可以看到这样的界面.