开发者社区> 问答> 正文

关于mysql order by 疑问:报错

@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时错误(在包含逗号的多个排序条件中),是否我的写法有误?

请指教,谢谢!

展开
收起
kun坤 2020-06-07 13:58:33 559 0
1 条回答
写回答
取消 提交回答
  •     jfinal 的 paginate 方法为了提升性能,所以会将计算总记录数的 sql 中 order by 部分给清除掉,因为查询总记录数量不需要 order by。所以你的 sql 参数在被清除这个 order by 时不正确,由于清除时用的正则表达式,所以正则匹配不到时只清掉了一部分。

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

    ######

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

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

    2020-06-07 13:58:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像