日期:2014-05-17  浏览次数:21047 次

分页查询的细节,都需要两次查询吗?
页面需要显示总共有多少页,还要显示当前页的数据。

这个必须查两次吗?有没有什么好的办法?
------解决方案--------------------
可以使用分析函数把总记录数检索出来,比如
标准分页SQL:

SELECT COUNT(*) FROM employees;

  COUNT(*)
----------
        61

SELECT n.employee_id
  FROM (SELECT m.employee_id,
               ROWNUM rn
          FROM (SELECT t.employee_id
                  FROM employees t
                 ORDER BY t.employee_id) m
         WHERE ROWNUM <= 4) n
 WHERE n.rn >= 2

EMPLOYEE_ID
-----------
          2
          3
          4

分析函数:

SELECT n.employee_id,
       n.total_cnt
  FROM (SELECT m.employee_id,
               m.total_cnt,
               ROWNUM rn
          FROM (SELECT t.employee_id,
                       COUNT(*) OVER() total_cnt
                  FROM employees t
                 ORDER BY t.employee_id) m
         WHERE ROWNUM <= 4) n
 WHERE n.rn >= 2

EMPLOYEE_ID  TOTAL_CNT
----------- ----------
          2         61
          3         61
          4         61

然后根据第一行TOTAL_CNT获取记录数就可以了。