SQL 查詢時使用in的情況下保證查詢結果順序


    最近在實際項目中發現了一個問題。在使用mybatis plus做查詢的時候,需要關聯兩張表查詢。 默認情況下,因為數據量不大,習慣先找到主表查詢出id的集合,轉而以這個id的list作為條件去檢索下一張表。實際的要求是最后返回的數據要以第一張表的create_time做倒序。 在第一次查詢的時候,確實做了時間的排序,但是當檢索下一張表的時候,因為使用了in() 影響了最后的查詢結果,沒能保證最后輸出的順序。

  一開始沒有注意到這個問題,最后發現使用in()的時候,並不能保證按照傳入參數的順序查詢。 解決的辦法就是使用field()函數即可。

  假設通過傳入的ID 集合順序來對查詢排序,就可以這么用

orader by field(ID,*,*,*,*,*)

  這里ID是字段,后面的* 表示需要傳入的參數。

  接下來就是怎么如何使用mybatis plus去實現了。

 StringBuilder orderSql = new StringBuilder();
        orderSql.append("order by field(ID,");
        int length = paramIds.size();
        for(int i= 0; i<length; i++){
            if(i==0){
                orderSql.append(paramIds.get(i));
            }else{
                orderSql.append(",")
                        .append(paramIds.get(i));
            }
            if (i==length-1){
                orderSql.append(")");
            }
        }
        queryWrapper.in(CollectionUtil.isNotEmpty(paramIds),"ID",paramIds)
                .last(orderSql.toString());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM