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

Posted 梦·谁都可以做

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录 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为查询当前条件下的合计数量

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


 

以上是关于记录 A表与B表中最新的一条数据关联(例子工单表与工单回访表)和 PageHelper插件丢失order by语句的主要内容,如果未能解决你的问题,请参考以下文章

表与表关联 一对一

数据库之 表与表之间的关系

数据库表与表之间的一对一对多多对多关系

MySQL数据库学习第六篇表与表之间的关系

sql,表与表之间列的包含查询

重修课程day40(mysql四之表与表关联和表操作)