1. 程式人生 > 其它 >關於客戶端介面分頁sql語句

關於客戶端介面分頁sql語句

今天突然翻到為客戶端寫分頁資料的sql,發現其實邏輯不對。列表是按照id降序的

當時這樣寫的:

#翻上一頁:
select 欄位 from 表 where id>lastId order by id desc limit pageSize
#翻下一頁:
select 欄位 from 表 where id<lastId order by id desc limit pageSize

lastId是臨近id,即上一頁是最上面的id,下一頁是最下面的id

pageSize是頁面條數

顯然,邏輯有問題。

如果pageSize=3;id列表是這樣的:

 14 13 12 11 10 9 8 7 6 5 4 3 2 1

因為id降序,因此翻頁是這樣的:

1 第一頁:14 13 12
2 第二頁:11 10  9
3 第三頁:8  7   6 
...

但實際上,後端接收三個引數:lastId,pageSize,direct。direct=0表示上一頁,1下一頁。

lastId=9,並向下一頁,則id<9 降序,得8 7 6,沒問題;

上一頁,則id>9,如果只是降序則取出:14 13 12,顯然應該是升序,即:10 11 12,然後再降序,返回給客戶端:12 11 10

因此,應該這樣寫

1 #翻上一頁:
2 select * from 
3 (select 欄位 from 表 where id>lastId order by id  limit pageSize) temp
4 order by id desc
5 #翻下一頁:
6 select 欄位 from 表 where id<lastId order by id desc limit pageSize