首页 > 其他 > 详细

记录 A表与B表中最新的一条数据关联(例子工单表与工单回访表)和 PageHelper插件丢失order by语句

时间:2021-06-25 16:52:04      阅读:23      评论:0      收藏:0      [点我收藏+]

工单表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为查询当前条件下的合计数量

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


 

记录 A表与B表中最新的一条数据关联(例子工单表与工单回访表)和 PageHelper插件丢失order by语句

原文:https://www.cnblogs.com/must-grow/p/14930467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!