1. 程式人生 > >sql in語句排序 INSTR函式排序用法 結果集list排序

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+" ,' ");