【思路】-分页-双top分页算法的原理

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

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

来自为知笔记(Wiz)

时间: 2024-08-26 00:55:14

【思路】-分页-双top分页算法的原理的相关文章

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

--跳过10条取2条 也叫分页select top 2 * from studentwhere studentno not in (select top 2 studentno from student order by studentno)order by studentno --row_number ()over() 分页select * from(select *,ROW_NUMBER()over(order by studentno)as myid from student ) as t

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

一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE … LIMIT 10; #返回前10行select * from table WHERE … LIMIT

查询分页-----强势top

查询分页:语句1性能提升10倍多,只是因为多了个top关键字,很不理解啊!!!! 1.查询时间1s内,r_object_id主键 select top 100 * from ( select all  doc.r_object_id "objid",doc.name,doc.number, doc.cuid, doc.r_creation_date, doc.security, doc.bordline, doc.twicedline, doc.dline, doc.keynum, d

【SqlServer】Top 分页高效率写法

SqlServer Top常用场景:分页 具体用法: (1)根据id分页 select top 页面大小 * from table1 where id not in( select top 页面大小*(页数-1) id from table1 order by id) order by id; (2)根据日期分页 select top 页面大小 * from table1 where id not in( select top 页面大小*(页数-1) id from table1 order b

常见hash算法的原理(转)

常见hash算法的原理 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 比如我们存储70个元素,但我们可能为这70个元素申请了100个元素的空间.7

Jsp分页实例---真分页

网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给客户端,由js来控制每一页的显示. 真分页:由程序控制,每一次只返回一页大小的数据,显示到客户端. 由此可以很清楚的分辨出真假分页各自的优缺点: 假分页:由于一次性读出所有数据并返回给客户端,如果数据量庞大,所以这一次的动作可能是非常消耗服务器资源和带宽的, 但是返回给客户端以后就非常轻松了,客户在

常见hash算法的原理

转自:http://blog.csdn.net/zxycode007/article/details/6999984 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的

Floyd算法的原理和实现

一.算法介绍 Floyd算法是一种在有向图中求最短路径的算法.相比不能再有向图中包含负权值的dijkstra算法,Floyd算法可以用在拥有负权值的有向图中求解最短路径(不过不能包含负权回路).它是一种求解有向图中点与点之间最短路径的算法. 我们检查有向图中的每一个节点X,对于图中过的2点A和B,如果有Dis(AX)+Dis(XB)<Dis(AB),那么使得Dis(AB)=Dis(AX)+Dis(XB).当所有的节点X遍历完后,AB的最短路径就求出来了. 所以,核心代码很简单,其中N是顶点个数,

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

自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其中引用bootstrap.css  和bootstrap .js是必须的 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ ta