1. 程式人生 > 其它 >記錄 A表與B表中最新的一條資料關聯(例子工單表與工單回訪表)和 PageHelper外掛丟失order by語句

記錄 A表與B表中最新的一條資料關聯(例子工單表與工單回訪表)和 PageHelper外掛丟失order by語句

工單表order 表結構及部分測試資料如下:

id order_name xxx

1 order_1 ....

2 order_2 ....

3 order_3

工單回訪表 order_revisit表結構及部分測試資料如下:

id order_id revisit_date revisit_status(1,2,3表示不同的回訪狀態)

1 1    2021-06-25 13:02:01 1

2 1 2021-06-25 14:02:01 1

3 1 2021-06-25 16:02:01 1

想要的結果是工單表與工單回訪表中revisit_date時間最新的一條資料關聯

select c.* from(select a.*,b.revisit_date, b.revisit_status from order a left join (select b.* from(select * from order_revisit order by revisit_date desc) m group by m.id) b where ......) c

在分頁查詢時,PageHelper會先查詢total,total大於0才會執行上面的sql語句

注意:pagehelper的坑點就在於會丟失語句中的order by, 所以統計出來的資料則不正確,則會出現實際資料與total資料不符合

解決方式:

1) 強制執行order by , 在order by語句前加上 /*keep orderby*/

2)重寫查詢total, 虛擬碼如下:

public PageResponse<T> selectPage(T params){
   PageHelper.startPage(params.getCurrent(),params.getPageSize(), false);  
List<T> resultList = xxxMapper.selectList(params);  
 
long total = xxxMapper.selectTotal(params);
   PageInfo pageIfo = new PageInfo(resultList);
pageInfo.setTotal(total);
   return PageResponse.of(pageInfo.getPageNum(), pageInfo.getPageSize(), pageInfo.getTotal(), resultList);
}
selectList為實際查詢資料的sql,
selectTotal為查詢當前條件下的合計數量

該隨筆為記錄工作中遇到的問題,若有不對的地方,請大佬指正,萬分感激!