zoukankan      html  css  js  c++  java
  • 记录 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 m.*,MAX(m.revisit_date) 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为查询当前条件下的合计数量

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


  • 相关阅读:
    Linux进程实践(5) --守护进程
    Linux进程实践(4) --wait避免僵尸进程
    Linux进程实践(3) --进程终止与exec函数族
    Linux进程实践(2) --僵尸进程与文件共享
    ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
    ORACLE查询某一字段重复的数据
    mysql字符集设置
    项目中填写全局常量
    mybatis的insert简单使用
    window.open()读取本地图片简单使用总结
  • 原文地址:https://www.cnblogs.com/must-grow/p/14930467.html
Copyright © 2011-2022 走看看