分页查询的细节,都需要两次查询吗?

aoyihuashao 2012-11-22 11:05:12
页面需要显示总共有多少页,还要显示当前页的数据。

这个必须查两次吗?有没有什么好的办法?
...全文
658 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hudingchen 2012-11-23
  • 打赏
  • 举报
回复
可以使用分析函数把总记录数检索出来,比如 标准分页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获取记录数就可以了。
小海葵1 2012-11-22
  • 打赏
  • 举报
回复 1
帮顶, 我一般都这么写。一次是count,一次是分页查。
cowboyhn 2012-11-22
  • 打赏
  • 举报
回复 1
如果是JDBC,可以先执行ResultSet.last(),然后再执行ResultSet.getRow()获取总记录数。
woof_1128 2012-11-22
  • 打赏
  • 举报
回复 1
这是必须的
fw0124 2012-11-22
  • 打赏
  • 举报
回复 1
2次。如果有主键或者非null行上的索引,count可以利用索引,也还挺快的。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧