关于mysql order by 疑问

李问问 发布于 2015/10/17 12:41
阅读 136
收藏 0

@final 在社区发了一遍,因问题比较急又在此重新提问,望见谅!

我的代码如下:
List<Object> param=new ArrayList<Object>();
StringBuffer where=new StringBuffer();
String rightsArea=getRightsArea();
if(!rightsArea.equals("")){
where.append(" and FIND_IN_SET(b.code,?)");
param.add(rightsArea);
}
orderby=" order by a.name asc,b.code desc";
String tableName="(select a.id,a.name,b.code from a left join b on a.id=b.id) tbl";
Page<Record> p = Db.paginate(this.getParaToInt("page", 1), this.getParaToInt("pageSize", 20), "select *", "from " + tableName+ " where 1=1 " + where.toString()+orderby, param.toArray());

执行的时候会提示sql错误,原因是jfinal得到的sql语句如下:
select count(*) from (select a.id,a.name,b.code from a left join b on a.id=b.id) tbl where 1=1 ,b.code desc

也就是说框架在计算行数时读取order by时错误(在包含逗号的多个排序条件中),是否我的写法有误?

请指教,谢谢!

加载中
0
JFinal
JFinal

    jfinal 的 paginate 方法为了提升性能,所以会将计算总记录数的 sql 中 order by 部分给清除掉,因为查询总记录数量不需要 order by。所以你的 sql 参数在被清除这个 order by 时不正确,由于清除时用的正则表达式,所以正则匹配不到时只清掉了一部分。

   建议改一下 sql ,或者在合适的地方添加扩号来解决。

0
xforgchen
xforgchen

请教个问题,使用jfinal分页的时候,如何获取总记录数?加上totalRow=page.totalRow 总是报错

<@paginate totalRow=page.totalRow currentPage=page.pageNumber totalPage=page.totalPage .............

返回顶部
顶部