關於客戶端介面分頁sql語句
阿新 • • 發佈:2022-05-04
今天突然翻到為客戶端寫分頁資料的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