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

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


  • 相关阅读:
    Lightoj---1030
    hdu---2091---空心三角形
    hdu---2037---今年暑假不AC
    将ant Design本地化,可通过link以及script直接引入html中使用
    js 解析json
    解决ant Design dva ajax跨越请求 (status=0)
    ubantu 14.04中安装npm+node.js+react antd
    ubantu中搭建virtualenv+python3.4+flask
    Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
    页面中去除浮动 clear:both
  • 原文地址:https://www.cnblogs.com/must-grow/p/14930467.html
Copyright © 2011-2022 走看看