您的位置:首页 > 数据库 > Oracle

[转]php + Oracle 实现分页

2008-05-11 23:35 281 查看
其实这个问题也没啥难度,不过到网上找了很久,用 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

( $select ) r

WHERE

ROWNUM <= :end_row

)

WHERE :start_row <= row_number";

$stmt = oci_parse($conn,$sql);

oci_bind_by_name($stmt, ':start_row', $start_row);

// Calculate the number of the last row in the page

$end_row = $start_row + $rows_per_page - 1;

oci_bind_by_name($stmt, ':end_row', $end_row);

oci_execute($stmt);

// Prefetch the number of rows per page

oci_set_prefetch($stmt, $rows_per_page);

return $stmt;

}

应用这个方法,写出的临时使用的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";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: