您的位置:首页 > 数据库

关于客户端接口分页sql语句

2015-06-18 10:26 232 查看
今天突然翻到为客户端写分页数据的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降序,因此翻页是这样的:

第一页:14 13 12
第二页:11 10  9
第三页: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

因此,应该这样写

#翻上一页:
select * from
(select 字段 from 表 where id>lastId order by id  limit pageSize) temp
order by id desc
#翻下一页:
select 字段 from 表 where id<lastId order by id desc limit pageSize
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: