分页查询中 关于 order by 去除的问题

我现在有这样的SQL语句采用分页查询:

SELECT a.id,a.artist_cnname,a.artist_enname, CONCAT(is_actor,is_director) rmk, a.optdate,a.optname, GROUP_CONCAT(f.film_cnname) film_name 

 FROM artist a LEFT JOIN film_artist fa ON a.id=fa.artist_id LEFT JOIN film f ON fa.film_id=f.id where a.artist_cnname in ( ?,?) 

GROUP BY fa.artist_id 

order by field(a.artist_cnname, ?,?)


Model在分页过程中,查询总个数生成totalRowSql:

select count(*)  FROM artist a LEFT JOIN film_artist fa ON a.id=fa.artist_id LEFT JOIN film f ON fa.film_id=f.id where a.artist_cnname in ( ?,?) 

GROUP BY fa.artist_id 

这个语句去除了 order by 的内容,然而,我的order by 查询中包含参数,查询过程中造成错误Parameter index out of range。


除了直接在 order by 后面拼接内容外,还有其他方法解决这类问题嘛?

评论区

JFinal

2016-09-13 18:44

order by 是不支持使用问号传参的,所以 orcer by ? 这种是通不过的

JFinal

2016-09-13 18:45

此外,如果 order by 子句没被现有的正则所匹配不上也会造成错误,这个经由在 mysql 上测试过移除 order by与否后的性能, jfinal 2.3 已经决定不处理 paginate 中的 order by 子移除工作,所以这个问题将来不会存在了

badouyuren

2016-09-13 18:51

@JFinal 我用的是这种order by field(a.artist_cnname, ?,?),刚才用了Db.query(),可以查出结果

badouyuren

2016-09-13 18:53

@JFinal 波总回的好快

JFinal

2016-09-13 19:42

@badouyuren 刚测试了一下, order by 里面还真可以用问号占位传参,以前一直记得只能在 where 子句中问号占位传参

你碰到的这个问题,建议暂时采用拼 sql 的方式,拼出来 order by 子句部分,jfinal 2.3 这个问题不就存在了

badouyuren

2016-09-13 20:05

@JFinal 了然,谢谢啦

热门反馈

扫码入社