sql不规则排序问题

select  t.ids as ids,t.REAL_AUTHENT,t.name,t.STAR_SCORE,t.SPECIAL_LIGHT_NUMBER,t.CASE_NUMBER,t.LY_PRACTICE_YEAR,t.byViewsNum,t.byThumbNum,t.byCollectNum

 from t_lawyer_business t

 where  t.name like '%%'

order by 

case status when 1 then 0 else 1 end,

STAR_SCORE desc,

SPECIAL_LIGHT_NUMBER desc,

CASE_NUMBER desc,

LY_PRACTICE_YEAR desc,

byViewsNum desc,

byCollectNum desc,

byThumbNum desc

好好的sql调用paginate分页查询就替换的sql有问题了:

SELECT

count(*)

FROM

t_lawyer_business t

WHERE

t.PARTY =?

AND t.LO_ID =?

AND t. NAME LIKE ? STATUS

WHEN 1 THEN

0

ELSE

1

END,

 STAR_SCORE DESC,

 SPECIAL_LIGHT_NUMBER DESC,

 CASE_NUMBER DESC,

 LY_PRACTICE_YEAR DESC,

 byViewsNum DESC,

 byCollectNum DESC,

 byThumbNum DESC

jfinal也太不强大了吧

评论区

JFinal

2017-11-10 18:06

为了实现性能与功能的平衡,paginate 只支持普通 order by 的替换,而复杂 order by 用一下 paginateByFullSql 这个 API ,具体的用法可以看一下 jfinal 手册第 5.5 章节: 《5.5 paginate 分页支持》

大致原因如下:
1:分页需要生成 sql 去计算当前 sql 的总记录数据,而这个 sql 是不需要 order by 子句的,sql server、oracle 这些数据库甚至不支持 select count 带有 order by 子句,所以 order by 一定要移除

2:由于 sql 语句可以嵌套可以很复杂,如果想用正则表达式非常干净地移除 order by 子句,那么这个正则表达式就要写得非常复杂冗长,比复杂冗长更麻烦的是:经实测这个正则的执行效率会下降一到两个数量级

3:大部分的 order by 是比较简单的,所以为了兼顾性能功能,让 paginate 只支持简单 order by,其它情况用 paginateByFullSql 支持

热门反馈

扫码入社