一、排除Top分页法(自命名,非规范)
思想:所谓“排除Top分页”,主要依靠“排除”和Top这个两大核心步骤。首先查询当前页码之前的数据,然后将该数据从总数据中排除掉,在从剩下的数据中获取前N条记录,就可以得到当前页码的数据。
举例-分页条件:每页显示2条记录,查看第3页
以SQLServer语法实现并说明步骤:
步骤1:编写基础查询语句并按照字段字段进行排序,排序字段会作为后续的数据筛选条件
1 select * from tableName order by id
步骤2:获取一个公式,该公式用于计算当前页码之前所有页面的总记录数
例子的当前页为第3页,那么在第3页之前有2页,并且每页显示2条,最后可得出之前页面总共为:2乘以2等于4条记录。然后根据逻辑得出计算公式:(当前页码-1)*每页显示条数,根据例子分页条件得出:(3-1)*2
步骤3:使用步骤2的公式加到步骤1语句中作为Top的数值,从而可以查出当前页之前的所有数据。
1 select top ((3-1)*2) * from tableName order by id
步骤4:在总数据中排除掉“当前页之前的所有数据”,然后进行排序
1 select * fromtableName2
3 Where id not in ( Select top ((3-1)*2) * id from order byid )4
5 Order by id
步骤5:在步骤4的语句中,取出前N条(每页显示的条数)
1 select top 2 * fromtableName
3 Where id not in ( select top ((3-1)*2) * id from order byid )
5 Order by id
SQLite数据库写法:
1 select * from tableName whereid2 not in (select did from DishInfo order by did limit (3-1)*2)3 order by did limit 2
注意:SQLite数据库中没有Top关键字,而使用limit关键字来取前N条。
Oracle数据库写法:
1 Select * from
2 Select * from tableName where id not in(3 Select id from (Seletc id from tableName where rownum<=(3-1)*2 order byid )4 ) order by id ) where rownu