描述:实现分页的一种算法
大致过程:访客访问不同的分页,为这个当前页生成动态的查询SQL,然后送到数据库中执行
输入:总条数,每页多少条,第几页,查询的SQL,排序的字段
注意:传入的排序字段需要构成唯一记录,这就意味着不能单独的使用SortOrder这个单独排序
字段反转:SortOrder asc,PostID desc;反转之后是SortOrder desc,PostID asc;
实现过程
访问第一页
访问后半数分页
100条数据 每页显示4条 按照ID降序 排序
当取第一页时:直接对所有数据降序取出前4条
当取第二页时:
1.先按降序获得前8条数据,然后升序排列着8条数据,
2.这样第二页的数据直接跑到了前面,取出4条,
3.然后在倒叙回去就是第二页的数据
同样的以此往下类推
当后半数分页时:
当取最后一页时:将所有数据升序过来,取出前4条即可
观察生成的过程
访问前半数分页
2016-06-17 08:48:34 SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:48:43 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 8 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:44 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 12 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:45 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 16 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:45 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 20 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:46 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 24 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:46 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 28 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:47 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 32 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:47 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 36 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:48:48 SELECT * FROM ( SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID desc LIMIT 40 ) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
访问后半数分页
2016-06-17 08:50:51 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 4 ) AS T ORDER BY PostID desc
2016-06-17 08:51:02 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 5 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:03 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 9 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:03 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 13 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:04 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 17 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:06 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 21 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:07 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 25 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:07 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 29 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:08 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 33 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:09 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 37 ) AS T ORDER BY PostID desc LIMIT 4
2016-06-17 08:51:09 SELECT * FROM ( SELECT * FROM (SELECT * FROM Post) AS T ORDER BY PostID ASC LIMIT 41 ) AS T ORDER BY PostID desc LIMIT 4
- [转]双TOP二分法生成分页SQL类(支持MSSQL、ACCESS)
本文转自:http://www.cnblogs.com/jitian/archive/2011/03/22/1991961.html 博客开张,先发以前的几个老物件儿,以前写下来的,现在发上来权当记录 ...
- 双有序队列算法——处理哈夫曼K叉树的高效算法
算法介绍: 哈夫曼树的思路及实现众所周知,大部分是用堆来维护和实现,这种思路比较清晰,在K比较小的时候处理较快(具体例子接下来再说),而且编程复杂度不是很高,利于应用.但是,其所用的数据结构是树,是在 ...
- 分页查询的两种方法(双top 双order 和 row_number() over ())
--跳过10条取2条 也叫分页select top 2 * from studentwhere studentno not in (select top 2 studentno from studen ...
- MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)
一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它 ...
- [BS-28] iOS中分页的几种算法
iOS中分页的几种算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResult == 0 ? total ...
- SQL TOP分页
SQL TOP分页 2010-11-12 16:35:29| 分类: SQL | 标签: |字号大中小 订阅 1.分页方案一:(利用Not In和SELECT TOP分页) 语句形式: ...
- Top Coder算法题目浏览器
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/top-code-offline-browser/ 关于 左耳朵耗子 ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- 【jQuery 分页】jQuery分页功能的实现
自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部 和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...
随机推荐
- AngularJS 后台交互
我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...
- CSS2中基本属性的介绍
这是继上一篇的选择器的总结,对css2基本属性的小结!
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- 新版macbook air OS X El Capitan 10.11安装WIN找不到驱动介质???
这个问题已经解决 首先进入Boot Camp6 以后 顶上会有一个操作 -下载windowns 驱动程序 保存在优盘里面.然后再分区选择ISO(中间和你前面做的一样)电脑重启进入WIN安装 到你们出现 ...
- js 操作数组封装
function OperateArray(array) { this.array = array; } OperateArray.prototype.hasValue = function(val) ...
- GZDBHelperDemo 一
1.新建Window窗体项目GZDBHelperDemo 2.从Nuget添加GZDBHelper引用 添加完成后会出现GZDBHelper的引用 3.添加数据库链接管理类 添加类库文件:Databa ...
- Spark学习(二) -- Spark整体框架
标签(空格分隔): Spark 还记得上次的wordCount程序嘛?通过这个小程序,我们来一窥Spark的框架是什么样子的. sc.textFile("/usr/local/Cellar/ ...
- SQL知识整理三:变量、全局变量、视图、事务、异常
变量 1.局部变量的声明(一个@) declare @n int --声明变量关键字为declare 然后@加变量名 后面是变量类型 declare @s varchar(36) 2 ...
- dll的导入库(lib)输出路径
创建动态链接库项目A, 它会生成:dll, lib, exp 等,其中 lib & exp 生成的路径设置在:[Linker]->[All Options]->[Import Li ...
- zoj3806Incircle and Circumcircle
链接 自己的本本没有装画图软件,先借用两张图片..博客园不让贴源地址... 可以想到对于一个确定的外接圆的三角形来说内切圆最大的时候为等边三角形,如下图: 确定有合法的解之后,接下来就是去找这个解,解 ...