biggates的心得

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  19 随笔 :: 1 文章 :: 11 评论 :: 0 Trackbacks
其实这个问题也没啥难度,不过到网上找了很久,用 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";

posted on 2008-05-11 23:35 biggates 阅读(39) 评论(0)  编辑 收藏 所属分类: php

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-11 23:38 编辑过
 
另存  打印