php + Oracle 實現分頁

來源:互聯網
上載者:User
其實這個問題也沒啥難度,不過到網上找了很久,用 between 的也有,用 minus 的也有。不過用這幾種方法都沒能成功的完成帶排序的分頁查詢。最後還是在Oracle官網找到瞭解決的辦法。
鑒於Oracle官網無與倫比的速度,將其摘抄與此,便於日後封裝 oci 串連類。

原文見 http://www.oracle.com/technology/global/cn/pub/articles/oracle_php_cookbook/fuecks_paged.html

 1function & paged_result(& $conn, $select, $start_row, $rows_per_page) {
 2
 3$sql = "SELECT
 4            *
 5FROM 
 6            (
 7SELECT
 8r.*, ROWNUM as row_number 
 9FROM
10( $select ) r
11WHERE
12ROWNUM <= :end_row
13            )
14WHERE :start_row <= row_number";
15    
16$stmt = oci_parse($conn,$sql);
17    
18oci_bind_by_name($stmt, ':start_row', $start_row);
19    
20// Calculate the number of the last row in the page
21$end_row = $start_row + $rows_per_page - 1;
22oci_bind_by_name($stmt, ':end_row', $end_row);
23    
24oci_execute($stmt);
25    
26// Prefetch the number of rows per page
27oci_set_prefetch($stmt, $rows_per_page);
28    
29return $stmt;
30
31}

應用這個方法,寫出的臨時使用的php語句類似於這樣:$select = "SELECT * FROM {$_DATABASE_TABLE_PREFIX_}toperate_log $where $order_by";

$sql = "SELECT * FROM ( SELECT r.*, ROWNUM as row_number FROM ( $select ) r WHERE ROWNUM <= ".($start + $limit)." ) WHERE $start <= row_number";

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.