PHP 使用 Oracle 分页方法

/*

$sql: SQL 语句

$pagedir : 分页点击跳转地址

$page 当前页

$count 数据总数

$pagesize 每页显示条数

*/

function page( $sql, $pagedir, $page = 1, $count, $pagesize= 10) {
        $pagecode     = ‘‘;
        
        $page         = intval($page);                
        $count         = intval($count);            
        if ( !$count) return ‘‘;
        $pagecount     = ceil( $count/ $pagesize );
        
        if( $page < 1 ) $page = 1;
        if( $page > $pagecount ) $page = $pagecount;
        
        $pageStart     = $pagesize * ($page-1) + 1;
        $pageEnd     = $pagesize * $page ;
        if ($pageEnd > $count) {$pageEnd = $count;}
        
        //$pagecode =     "<a href=\"$pagedir&page=1\"><img src=\"../themes/Sugar/images/left2.png\" align=\"absmiddle\" border=\"0\" alt=\"Start\" /></a>";
        
        if ( $page == 1 || empty( $page) ) {
            $pagecode = "<button type=\"button\" id=\"popupViewStartButton\" title=\"Start\" class=\"button\" disabled=\"\">
                                    <span align=\"absmiddle\" border=\"0\" class=\"spr_60e88c7c4bc21ade9c3010b6abcdc0fd\" title=\"Start\"></span>
                                </button><button type=\"button\" id=\"popupViewPrevButton\" class=\"button\" disabled=\"\" title=\"Previous\">
                                    <span align=\"absmiddle\" border=\"0\" class=\"spr_85ff471105a04f2dd1f76dd22206dd14\" title=\"Previous\"></span>
                                </button>";
        } else {
            
            $pagecode = "<button type=\"button\" id=\"popupViewStartButton\" title=\"Start\" class=\"button\" onclick=\"location.href=‘{$pagedir}&page=1‘\">
                                    <span align=\"absmiddle\" border=\"0\" class=\"spr_e6223c471f8cf9df579462569fa9306c\" title=\"Start\"></span>
                                </button>";
            if ( $page > 1 ) $PreviousPage = $page -1; else $PreviousPage = 1;
            
            //$pagecode .= "<a href=\"$pagedir&page=$PreviousPage\"><img src=\"../themes/Sugar/images/left1.png\" align=\"absmiddle\" border=\"0\" alt=\"Previous\" /></a>";
            $pagecode .="<button type=\"button\" id=\"popupViewPrevButton\" title=\"Previous\" class=\"button\" onclick=\"location.href=‘{$pagedir}&page={$PreviousPage}‘\">
                        <span align=\"absmiddle\" border=\"0\" class=\"spr_a6fa65259296aaa5b94ded054464cf68\" title=\"Previous\"></span></button>";
        }
    
        //$pagecode .= "<span class=\"pageNumbers\">($pageStart - $pageEnd of $count)</span>";
        if ( $page < $pagecount ) $NextPage = $page + 1; else $NextPage = $pagecount;
        
        
        if ( $pagecount == $page ) {
            $pagecode .= "<span class=\"pageNumbers\">($pageStart - $pageEnd of $count)</span>";
            $pagecode .="<button type=\"button\" id=\"popupViewNextButton\" class=\"button\" title=\"Next\" disabled=\"\">
            <span align=\"absmiddle\" border=\"0\" class=\"spr_9c82366f2d3d35c243dd91706811b036\" title=\"Next\"></span>
            </button>
            <button type=\"button\" id=\"popupViewEndButton\" class=\"button\" disabled=\"\" title=\"End\">
            <span align=\"absmiddle\" border=\"0\" class=\"spr_17b56a3610caf7a7ad1aa7da7a984801\" title=\"End\"></span>
            </button>";
        } else {
            $pagecode .= "<span class=\"pageNumbers\">($pageStart - $pageEnd of {$pageEnd}+)</span>";
            $pagecode .= "<button type=\"button\" id=\"popupViewNextButton\" title=\"Next\" class=\"button\" onclick=\"location.href=‘{$pagedir}&page={$NextPage}‘\">
            <span align=\"absmiddle\" border=\"0\" class=\"spr_8770145eda4b0bf4f79175b595174ae2\" title=\"Next\"></span>
            </button>
            <button type=\"button\" id=\"popupViewEndButton\" title=\"End\" class=\"button\" onclick=\"location.href=‘{$pagedir}&page={$pagecount}‘\">
            <span align=\"absmiddle\" border=\"0\" class=\"spr_60d1e91e479a5648f0ca1a59e0f39c61\" title=\"End\"></span>
            </button>";
            //$pagecode .= "<a href=\"$pagedir&page=$NextPage\"><img src=\"../themes/Sugar/images/right1.png\" align=\"absmiddle\" border=\"0\"  alt=\"Next\" /></a>";
            //$pagecode .= "<a href=\"$pagedir&page=$pagecount\"><img src=\"../themes/Sugar/images/right2.png\"  align=\"absmiddle\" border=\"0\"  alt=\"End\" /></a>&nbsp;&nbsp;";
        }
        
        $result = array();
        $sql = str_replace( array( ‘{#pageStart#}‘, ‘{#pageEnd#}‘), array( $pageStart, $pageEnd), $sql);
        
        $result = $this->oracle->GetArray( $sql );
        return array( ‘pagecode‘=>$pagecode, ‘result‘=> $result, ‘pagecount‘=>$pagecount);
    }

调用示例如下:

$count = $this->oracle->GetOne("select count(1) from (
        SELECT DISTINCT C.ID FROM ACCOUNTS A
        LEFT JOIN ACCOUNTS_CSTM B ON ( A.ID = B.ID_C )
        LEFT JOIN CASES C ON ( C.ACCOUNT_ID = A.ID )
        LEFT JOIN CASES_CSTM CS ON ( C.ID = CS.ID_C )
        WHERE A.DELETED = 0 AND C.DELETED =0 AND  B.MG_INSERTDATE_C < TO_DATE(‘{$this->existing_date}‘, ‘{$this->time_format}‘ )
        AND B.MG_SUPPLIER_STATUS_C = ‘NON MSC‘
        AND CS.MG_CASE_ORIGIN_C = ‘eform_portal‘ $whereSQL ) tt ");
        
        $SQL = "SELECT DISTINCT C.ID , C.NAME NAME, A.NAME SUPPLIER_NAME, C.STATUS, CS.MG_CASE_SUBJTYPE_C CASE_SUBJECT_TYPE, TO_CHAR( C.DATE_ENTERED, ‘DD.MM.YYYY HH24:MI:SS‘) CREATE_DATE,
        TO_CHAR( CS.MG_CASE_DUE_DATE_C, ‘DD.MM.YYYY‘ ) DUE_DATE,
        (SELECT NAME FROM TEAMS WHERE DELETED = 0 AND ID =C.TEAM_ID ) TEAM_NAME  
        FROM ACCOUNTS A
        LEFT JOIN ACCOUNTS_CSTM B ON ( A.ID = B.ID_C )
        LEFT JOIN CASES C ON ( C.ACCOUNT_ID = A.ID )
        LEFT JOIN CASES_CSTM CS ON ( C.ID = CS.ID_C )
        WHERE A.DELETED = 0 AND C.DELETED =0 AND  B.MG_INSERTDATE_C < TO_DATE(‘{$this->existing_date}‘, ‘{$this->time_format}‘ )
        AND B.MG_SUPPLIER_STATUS_C = ‘NON MSC‘
        AND CS.MG_CASE_ORIGIN_C = ‘eform_portal‘ $whereSQL ";

$newSQL = "select * from ( select aa.*, rownum rn from ($SQL) aa where rownum <= {#pageEnd#} ) where rn >= {#pageStart#}";
        
$pagedir = "funnel_list.php?action=non_msc_cases_list&para=".$para;
$result = $this->pages( $newSQL, $pagedir, $_REQUEST[‘page‘], $count, 20);

时间: 2024-12-28 04:53:45

PHP 使用 Oracle 分页方法的相关文章

oracle分页查询结果集重复问题&解决方法

做项目时,无意间发现了分页上的一个bug,在此记录一下: 首先手动将后台输出的sql语句复制进oracle中查看,以便排查错误,对比以下视图前10条的结果集与10到20条的结果集,发现大部分记录出现重复现象,SQL语句如下: --前10条记录 select *   from (select row_.*, rownum rownum_           from (select t.idcard, count(1)                   from sampling.v_unvou

Oracle分页查询语句的写法(转)

分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.Oracle分分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHER

ORACLE 分页查询

Oracle之分页查询 Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句.ROWNUM <= 40和RN >= 21控制分页查询的每页的范围.

2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工

 ROWNUM的知识点 A ROWNUM按照oracle的默认机制生成. B rownum只能使用<=  <号,不能使用>  >= rownum的实现机制 rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化).没有第一行,就没有第二行:没有第二行就没有第三行. Oracle Top-N select rownum,empno,ename,sal from (select empno,ename,sal from emp order by

Oracle分页在Web上的首页

本例子代码,只讲Oracle分页的常用的一种方法在Web中的使用,不涉及MVC,代码优化等东西,高手请飘过.新手可以参考. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- 2121400 1.分页写法一 SELECT * FROM (SELECT ROWNUM RN, A.* FROM (SELECT * FROM BPM_PROCVAR ORDER BY VARID) A WHERE ROWNUM <= 40) B WHERE B.RN >= 21; 查询结果:

oracle 分页存储过程

--创建表declare num number; begin select count(1) into num from user_tables where table_name='SRCT';   --判断当前要创建的表在数据库中是否存在.if num>0 then execute immediate 'drop table '||'SRCT'; --表名要大写end if; execute immediate 'CREATE TABLE SRCT(    SN  char(11),   XM

Oracle分页总汇

Oracle分页总汇 select * from (select a.*,rownum row_num from (select * from mytable t order by t.id desc) a where rownum<=10 ) b where b.row_num >= 1 order by u_age desc; select * from (select a.*,rownum row_num from (select * from mytable t order by t.

Oracle分页问题

今天在公司遇到一个分页查询的bug,查询第一页可以查询到数据,下面也显示的没有问题!查询第二页时,显示已经加载完成,但是页面没有问题! 通过Debug调试,发现第一页查询到的数据没有问题,第二页时,查不到数据! 第一页时,控制台打印的sql语句: SELECT OBJ_NAME, OBJ_ATTRIBUTE_NAME, ATTRIBUTE_TYPE, DES, STS, PRIORITY FROM ( SELECT m.*,rownum row_id FROM (SELECT OBJ_NAME,