1. 程式人生 > >記錄pageHelper分頁orderby的坑

記錄pageHelper分頁orderby的坑

type 開啟 brush map desc mark gpo 就是 倒序

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);

  

記錄pageHelper分頁orderby的坑