zoukankan      html  css  js  c++  java
  • 记录pageHelper分页orderby的坑

    pageHelper的count查询会过滤查询sql中的order by条件!

    pageHelper分页功能很强大,如果开启count统计方法,在你执行查询条件时会再执行一条selet count(*) from 的sql,

    这个结果就是pageinfo属性中total的值。但是我在项目中遇到一个坑(total总数和自己sql查出的结果不一致),首先看我的sql:

    SELECT t2.* FROM (SELECT t.* FROM qf_invoice t WHERE t.status =5 and t.isopen !=5 and t.remark ='查无此票'
    GROUP BY t.invoice_id )t2 LEFT JOIN (select t1.create_time,t1.invoice_id from 
    (SELECT z.* from qf_invoice_log z ORDER BY z.create_time asc ) t1 where t1.type =102  GROUP BY   t1.invoice_id)t3 ON t2.invoice_id = t3.invoice_id where 1=1 and epid = '001010001' 
    and t3.create_time  <= DATE_SUB(NOW(), INTERVAL 3 day)  ORDER BY t2.input_time DESC ;
    

      

      这是我查询数据的sql

    初略的看感觉没什么问题啊,这也是我为什么在这个问题上浪费了太多的时间。

    最后才发现count的sql中“order by  desc”的条件全没有了,因为我其中一条sql需要根据时间倒序作为条件,

    这样导致我count的值其实是不准确的,但是list的值又是正确的。
            PageHelper.startPage(page, pageSize);
            List<Map> oldMap = invoiceMapper.reviewInvoiceList(paramMap);
    

      

     这里我查出的分页数据的size为0,但是total值却变成2了- -

    最后将count的方法重写一下就可以了,这样就不会出现total总数不正确的状况。

    /**
             * pageHelper分页查询count时会默认过滤掉sql中的orderby条件。
             */
            PageHelper.startPage(page, pageSize,false);
            List<Map> oldMap = invoiceMapper.reviewInvoiceList(paramMap);
            long oldMapTotal = invoiceMapper.reviewInvoiceList_COUNT(paramMap);
    

      

  • 相关阅读:
    提纲挈领webrtc之vad检测
    提纲挈领webrtc音频处理算法之写在前面的话
    搭建git远程服务器三步骤
    详解m4文件
    chrome浏览器被reimage pair 劫持怎么处理
    linux查看系统32位还是64位
    git gc和fsck的用法
    ubuntu 16.04 的64位 安装arm-none-linux-gnueabi-gcc的步骤和问题解决
    利用终端命令实现进入ntfs分区有两种方法。
    ubuntu-14.10下,安装gcc交叉编译器遇到问题及解决方法
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/8468547.html
Copyright © 2011-2022 走看看