描述:实现分页的一种算法

大致过程:访客访问不同的分页,为这个当前页生成动态的查询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分页算法的原理的更多相关文章

  1. [转]双TOP二分法生成分页SQL类(支持MSSQL、ACCESS)

    本文转自:http://www.cnblogs.com/jitian/archive/2011/03/22/1991961.html 博客开张,先发以前的几个老物件儿,以前写下来的,现在发上来权当记录 ...

  2. 双有序队列算法——处理哈夫曼K叉树的高效算法

    算法介绍: 哈夫曼树的思路及实现众所周知,大部分是用堆来维护和实现,这种思路比较清晰,在K比较小的时候处理较快(具体例子接下来再说),而且编程复杂度不是很高,利于应用.但是,其所用的数据结构是树,是在 ...

  3. 分页查询的两种方法(双top 双order 和 row_number() over ())

    --跳过10条取2条 也叫分页select top 2 * from studentwhere studentno not in (select top 2 studentno from studen ...

  4. MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)

    一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它 ...

  5. [BS-28] iOS中分页的几种算法

    iOS中分页的几种算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResult == 0 ? total ...

  6. SQL TOP分页

    SQL TOP分页 2010-11-12 16:35:29|  分类: SQL |  标签: |字号大中小 订阅     1.分页方案一:(利用Not In和SELECT TOP分页) 语句形式:   ...

  7. Top Coder算法题目浏览器

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/top-code-offline-browser/ 关于 左耳朵耗子 ...

  8. 程序员编程艺术:第三章续、Top K算法问题的实现

    程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha.     致谢:微软100题实现组,狂想曲创作组.     时间:2011年05月08日    ...

  9. 【jQuery 分页】jQuery分页功能的实现

    自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...

随机推荐

  1. HTML5:web socket 和 web worker

    a:hover { cursor: pointer } 做练习遇到了一个选择题,是关于web worker的,问web worker会不会影响页面性能?补习功课之后,答案是不会影响. 查阅了相关资料学 ...

  2. tomcat 增加压缩设置

    conf/server.xml中,Connector的配置中添加 compression="on" compressionMinSize="512" noCom ...

  3. Eclipse+maven+scala2.11.8+spark2.0.0的环境部署

    主要在maven-for-scalaIDE纠结了,因为在eclipse版本是luna4.x 里面有自己带有的maven. 根据网上面无脑的下一步下一步,出现了错误,在此讲解各个插件的用途,以此新人看见 ...

  4. [bzoj 3732] Network (Kruskal重构树)

    kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...

  5. 基于springMVC+angular+bootstrap+mysql的简易购物网站搭建

    https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&cad=rja& ...

  6. Contact项目梳理

    1. 共三张表:user用户表  group分组表 contact联系人表 entity  分模块,三个实体类,三个模块 2. 先注册再登录 DAO:UserDAOImpl public User g ...

  7. iOS - WXPay 微信支付

    1.微信支付申请 微信支付官方集成指引 微信支付官方集成指导视频 微信 APP 支付开发者文档 微信公众平台 微信开放平台 微信商户平台 1.1 微信 APP 支付申请步骤 APP 支付:APP 支付 ...

  8. build.fxbuild打不开 Failed to create the part's controls

    Failed to create the part's controls 以文本形式打开之后,发现编码的地方不是常用编码 将之修改为GBK 然后就可以正常打开了 最后把eclipse中的编码统一设置为 ...

  9. $.unique()去重问题

    var yearArray = new Array(2009, 2009, 2010, 2010, 2009, 2010);$.unique(yearArray); 返回 2009, 2010, 20 ...

  10. unity自带寻路Navmesh入门教程(一)

    说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后回顾,或者方便刚入门的朋友学习.水平有限请勿见怪.不过请尊重码字截图录屏的劳动,如需转载请先告诉我.谢谢! unity自从3.5版本之后,增加 ...