記錄 A表與B表中最新的一條資料關聯(例子工單表與工單回訪表)和 PageHelper外掛丟失order by語句
阿新 • • 發佈:2021-06-25
工單表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為查詢當前條件下的合計數量
該隨筆為記錄工作中遇到的問題,若有不對的地方,請大佬指正,萬分感激!