其他分享
首页 > 其他分享> > 记录 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为查询当前条件下的合计数量

该随笔为记录工作中遇到的问题,若有不对的地方,请大佬指正,万分感激!


 

标签:插件,工单表,revisit,表与,id,params,total,order,select
来源: https://www.cnblogs.com/must-grow/p/14930467.html