3.2K Star 8.8K Fork 3.6K

GVPJFinal / JFinal

 / 详情

sql 语句带 group by 的分页存在bug

已完成
创建于  
2016-01-18 16:48

sql 为类似如下型式

select id,name from user group by dept_id

使用Model.paginate(page,pageSize,selectSql,whereSql)

最后得出的查询记录总数sql为如下sql

select count(*) from user group by dept_id

结果存在问题,我现在是直接修改了源代码Model类的307行

改成这样了

String totalRowSql = "select count(*) from ( select 1 " + config.dialect.replaceOrderBy(selectAndSqlExceptSelect[1]) +") a";

相比原来的代码

String totalRowSql = "select count(*) " + config.dialect.replaceOrderBy(selectAndSqlExceptSelect[1]);

查询效率上比会多一起全量扫描,但是能防止group by 的bug产生

评论 (6)

明天早上升级到 jfinal 2.2,这个问题已经在这版本中更新了,明天关注一下

@JFinal :scream: 波总速度好快,这么快就2.2了:+1: :+1: :+1:

@明日的乌鸦 现在可以通过升级到 jfinal 2.2 来解决问题了:http://www.oschina.net/news/70001/jfinal-2-2

状态更改为 已关闭

太棒了:+1:,赶紧下载试试

已经试过了,并读了下代码,实现非常好,不用改任何代码就可以完美兼容

List result = Db.query(config, conn, totalRowSql, paras);
		int size = result.size();
		if (isGroupBySql == null) {
			isGroupBySql = size > 1;
		}
		
		long totalRow;
		if (isGroupBySql) {
			totalRow = size;
		} else {
			totalRow = (size > 0) ? ((Number)result.get(0)).longValue() : 0;
		}
		if (totalRow == 0) {
			return new Page<M>(new ArrayList<M>(0), pageNumber, pageSize, 0, 0);	// totalRow = 0;
		}

:+1:

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
840 jfinal 1580661334 3343 tcrow 1578914175
Java
1
https://gitee.com/jfinal/jfinal.git
git@gitee.com:jfinal/jfinal.git
jfinal
jfinal
JFinal

搜索帮助

344bd9b3 5694891 D2dac590 5694891