NutzCN Logo
问答 dao分页排序如果排序字段数据一样会有重复的记录在每页上
发布于 2748天前 作者 shenxiaolei123 1987 次浏览 复制 上一个帖子 下一个帖子
标签:

使用以下这种方式分页并排序
Pager pager = dao.createPager(pageNumber, pageSize);
Condition c = Cnd.where("age",">",30).and("name", "LIKE", "%K%").desc("age");
List list = dao.query(Pet.class, c, pager);
pager.setRecordCount(dao.count(Pet.class,c));
return new QueryResult(list, pager);
如果排序字段数据都一样的时候,分页记录会有重复的数据显示在每页。
这个BUG希望在下个版本中修正一下。
每页10条,后台生成如下的sql
第一页
select * from(select row_number()over(order by tc)__rn__,* from(select top 10 0 tc, * FROM Pet WHERE 1='1' ORDER BY age DESC )t)tt where rn > 0 order by rn
第二页
select * from(select row_number()over(order by tc)__rn__,* from(select top 20 0 tc, * FROM Pet WHERE 1='1' ORDER BY age DESC )t)tt where rn > 10 order by rn
第三页
select * from(select row_number()over(order by tc)__rn__,* from(select top 30 0 tc, * FROM Pet WHERE 1='1' ORDER BY age DESC )t)tt where rn > 20 order by rn

18 回复

分页SQL有bug的意思吗??

对头,用的mssql数据库。

那正确的SQL应该是怎样写呢??

在字查询中把所有的记录row_number()一下,条数太多的话,就性能不好了。
在第一层的top取出每页的size.

额, 给个SQL看看嘛...

每页10条,总条数30
select top 10 * from(select row_number()over(order by tc)__rn__,* from(select top 30 0 tc, * FROM Pet WHERE 1='1' ORDER BY age DESC )t)tt where rn > 0 order by rn

貌似靠谱,我看看怎么改

我用的是nutzwk,也有这个问题,数据库其实就一条记录,但是展示在界面上会在不同页面出现相同的数据,兽总,修复了会通知不?

mysql,和楼主一样

mysql哪有这样的语法

我没有打出sql,刚好昨天有人反馈,查了下帖子,是有问题,数据库其实就一个记录

那就不是一码事

sqlserver的这个问题, 再加id排序就解决了

好,那等我把数据导本地,打出sql,看下,我qq发你界面展示现象了

严重怀疑是 sqlserver

来自美丽的 NutzCN

我导出数据跑下sql

测试了,nutz代码没有问题,是因为没有加索引,mysql全部扫描排序之后出现的重复数据,order by的字段加上索引后正常了

添加回复
请先登陆
回到顶部