在多排序條件下SQL獲文章上一條 下一條記錄

2022-01-14 17:11:31 字數 1629 閱讀 6535

在我們開發cms系統的時候經常會碰到需要根據當前記錄來讀取它的上一條記錄或下一條記錄的現像。單字段排序時sql語句非常簡單,但是當以多字段排序時應該怎麼寫呢?實際上也複雜,多欄位無法搞定那麼我們就需要將多個字段合併在一起,形成乙個固定長度的字串,再將這個生成的字串做為排序字段進行排序。注意,這個排序字串的長度一定要是固定的,所有記錄生成的排序字串長度一至才能準確進行排序。

表結構:

create

table

[table1](

[id][

int]

identity(1,1) not

null

,

[name][

varchar

](50) not

null

,

[sort][

int]

notnull

,

[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

top1

*,(convert(varchar,10000

+ sort) +

convert(varchar,createdon,120)) as

a1from

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

top1

*,(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;

Mysql 查詢當前資料上一條和下一條的記錄

獲取當前檔案上一條與下一條記錄的原理是上一條的sql語句,從news表裡按從大到小的順序選擇一條比當前id小的新聞,下一條的sql語句,從news表裡按從小到大的順序選擇一條比當前id大的新聞。如果id是主鍵或者有索引,可以直接查詢 方法1 sql view plain copy 1.select ...

Mysql 查詢當前資料上一條和下一條的記錄

獲取當前檔案上一條與下一條記錄的原理是上一條的sql語句,從news表裡按從大到小的順序選擇一條比當前id小的新聞,下一條的sql語句,從news表裡按從小到大的順序選擇一條比當前id大的新聞。如果id是主鍵或者有索引,可以直接查詢 方法1 1.select from table a where i...

SQL查詢當前資料上一條和下一條的記錄

id是指當前資料news id引數 方法一 string presql select top 1 from news where news id id order by news id desc string nextsql select top 1 from news where news id ...