关于客户端接口分页sql语句
2015-06-18 10:26
232 查看
今天突然翻到为客户端写分页数据的sql,发现其实逻辑不对。列表是按照id降序的
当时这样写的:
lastId是临近id,即上一页是最上面的id,下一页是最下面的id
pageSize是页面条数
显然,逻辑有问题。
如果pageSize=3;id列表是这样的:
因为id降序,因此翻页是这样的:
但实际上,后端接收三个参数: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 表 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
相关文章推荐
- oracle 数据库表的列名修改
- sql server更改端口后如何连接
- 记一次mysql访问权限问题
- mysql用命令创建用户创建数据库设置权限
- 防止sql注入 参数化解决方案
- PL/SQL Developer 显示中文乱码问题
- 修改mysql的数据内容路径
- Class.forName加载mysql驱动总是产生ClassNotFoundException异常
- Mysql 登陆&退出、创建&删除&选择数据库、基本数据类型、创建&删除表格
- sqlmap使用记录
- oracle 体系结构解析
- Oracle Policy For NBU
- mysql 性能优化方向
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
- 数据库的唯一标示符(ID)的选择
- MySQL启动不了 错误3
- C# Oracle分頁完整代碼
- SQL 数字金额转为英文形式
- mysql乱码问题
- redis 对数组的操作