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

大致过程:访客访问不同的分页,为这个当前页生成动态的查询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. jQuery的deferred对象学习

    #copy { background-color: lightgreen; padding: 15px; margin: 10px } 一.deferred对象简介 deferred对象是jquery ...

  2. 不写完不回家的TreeSet

    TreeSet详解 继承架构图: |——SortedSet接口——TreeSet实现类 Set接口——|——HashSet实现类                  |——LinkedHashSet实现 ...

  3. 如何在RCP程序中添加一个banner栏

    前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个bann ...

  4. jQuery学习笔记(五)jQuery中的表单

    目录 单行文本框的应用 表单验证 上次我们说完jQuery中的动画之后,我们再来看一种jQuery在Web网页应用最为广泛的一种形式,这就是jQuery对表单的操作,通过jQuery对表单的操作,可以 ...

  5. DbnBase64加密处理

    package com.dbn.utils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; impo ...

  6. jQuery选择器方式-用的不多的name选择器

    id:$("#id") name:$("[name='name']") class:$(".class") element:$(" ...

  7. OAuth2.0说明文档

    OAuth2.0说明文档 1.OAuth 2.0 简介 OAuth为应用提供了一种访问受保护资源的方法.在应用访问受保护资源之前,它必须先从资源拥有者处获取授权(访问许可),然后用访问许可交换访问令牌 ...

  8. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  9. UVALive 3177 长城守卫

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  10. 微信小程序-视图容器组件

    view 视图容器 例如: <view class="section"> <view class="section__title">fl ...