sql in語句排序 INSTR函式排序用法 結果集list排序
最近有個需求是對sql的結果集list進行排序,因為list預設查出的結果排序是按該表id索引的順序查詢的,所以順序也是按索引順序排列,如果想讓list按自己的結果顯示,那麼有兩個方法:
1,將in語句拆成 union 的方法,此處就不多說了
2,在網上看到 instr 的函式來進行排序,這裡我想要說的是在hql中拼接該語句時候贏注意的問題
先看一下 例句:
SELECT * FROM xz_topic WHERE t_id IN(142,1,13,199,204,17,198,205)
結果 :1,13,17,142,198,199,204,205
SELECT * FROM xz_topic WHERE t_id IN(142,1,13,199,204,17,198,205) ORDER BY INSTR(',142,1,13,199,204,17,198,205,',CONCAT(t_id))
結果 :1,142,13,199,204,17,198,205
SELECT * FROM xz_topic WHERE t_id IN(142,1,13,199,204,17,198,205) ORDER BY INSTR('142,1,13,199,204,17,198,205',CONCAT(',',t_id,','))
結果 :142,205,1,13,199,204,17,198
SELECT * FROM xz_topic WHERE t_id IN(142,1,13,199,204,17,198,205) ORDER BY INSTR(',142,1,13,199,204,17,198,205,',CONCAT(',',t_id,','))
結果 :142,1,13,199,204,17,198,205
通過檢視例句,就能發現,只有最後一句是我們想要的結果,2,3條語句的問題就是出現下 ‘ ,’ 逗號問題上, 逗號的作用是精確匹配,沒有逗號,匹配就會出現問題
還有 就是具體在java程式碼中拼接hql語句時要注意的
f.append(" and bean.id in ( :ids ) ORDER BY INSTR(:ids2 ,CONCAT(',',bean.id,','))");
f.setParameterList("ids", temp);
f.setParameter("ids2", " ', "+ids+" ,' ");