在sqlsever中实现分页常用的是使用以下语句
select top 10 * from [PRD_KPI].[dbo].[student]
where id not in (
select top 0 id from [PRD_KPI].[dbo].[student] order by grade desc
)
order by grade desc
这个是选取前十条,如果是11~20条的改成如下即可
select top 10 * from [PRD_KPI].[dbo].[student]
where id not in (
select top 10 id from [PRD_KPI].[dbo].[student] order by grade desc
)
order by grade desc
然而这样做会出现以下bug
分数一样的几个数据,可能会出现多次排序而结果不一致的情况,这样如果相同分数在边界的时候,比如 当"李白","尔康","杜甫"三个人分数一样并且排在9到11,以10行为一页时可能会出现其中一个出现两次,而另外一个却没显示的bug。
而在hibernate中使用setFirstResult,setMaxResults对sqlserver数据库进行分页时使用的就是以上分页的实现。导致这个bug找了半天。
解决方法一次全部读完,再用subList分割