select   *   from   (select   rownum   rm,s_QZJX_AZSQD.*   from   s_QZJX_AZSQD)   where  s_QZJX_AZSQD.ejdwbm='$coid' and  s_QZJX_AZSQD.substr(sblbdm,1,2)='$id' and    rm>=1   and   rm<=10 ----oracle中取1到10行

解决方案 »

  1.   

    不通用的东西,不要用!如果你的是MySQL,请使用传说中最前的分页功能——limit!!如果是MSSQL活着其他的数据库,请使用镶嵌select语句分页!保证你用的爽!嘿嘿,具体方法就是不公布,就是不公布~等我写完函数之后,一块贴出来吧
      

  2.   

    现在我的分页别的都好用,只是在第一页就把所有数据全读了出来,怎么能把数据分段呢?
    =============================================
    可考虑使用php数组函数array_slice(结果数组,int offset,int length)
      

  3.   

    或者
    $start = (当前页数-1)*每页显示的条数;
    $end   = $start + 每页显示的条数;
    for ($i=$start; $i<$end; $i++)
      

  4.   

    to foolbirdflyfirst(湖水清澈) ;我就是按您说的那样写的呀
      

  5.   

    try:
    $start = ($page-1) * $msgnum;
    $end = $start + $msgnum;
      

  6.   

    luojxun() :"第一页就把所有数据全读了出来"你如果存的是数组计算开始结束的下标不就好了
    ============================那我应该怎么改呢?指导一下吧
      

  7.   

    $totalpage=$i/$msgnum;
    if ($page>$totalpage)  { $page = $totalpage; }
    if ($totalpage>round($totalpage)){$totalpage=round($totalpage)+1;}
    else{$totalpage=round($totalpage);}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\这里也有问题$page 会出现小数,我会这么写:$totalpage=ceil($i/$msgnum);
    if ($page>$totalpage)  { $page = $totalpage; }==================================第一页全都出现,还是看这里到底怎么输出的,$start $end 具体是多少for ($i=$start; $i<$end; $i++)
    {
        //这里是读取记录
    }================================
      

  8.   

    $start $end都没有错,一个是0,一个是设定每页显示的条数,还是不好用啊
      

  9.   

    晕了,这个是php+MySQl啊!不用limit干什么?select * from 表 where 条件 limit maxcount*(page-1),maxcount*page里面maxcount就是你你也最多显示的条数,page是第几页……当然了,第一页不能用这个,要用下面的这个select * from 表 where 条件 limit maxcount不用limit,难道你自己写子查询?不是多此一举?
      

  10.   

    是php+MySQl的吗?那就是我写错了,我做的是PHP+ORACLE的,那上面的代码在我的程序中运行也没提示错误啊
      

  11.   

    for ($i=$start; $i<$end; $i++)
    {
        //这里是读取记录<-=====把这里的代码给出来
    }
      

  12.   


    select * from talbe where 字段=XX  order by yyy limit(每页记录数)
      

  13.   

    我来贴一个我写的分页类程序, 共享一下.<?php
    /**
     *  我写的分页类, 支持 PHP+MySQL+ADODB环境, php version > 4, MySQL version > 4.1.14(支持子查询)
     *  用法:
     *       $sql = "select * from myTable";
     *       $page = new Page($myADODBConnection, $sql, $_GET["pageNum"], "utf-8", 20);
     *  $page->curPage();
     *       for($i = 0; $i < count($page->rs); $i++){
     * // 打印结果
     *       }
     *       $page->pageLink($_SERVER['PHP_SELF'], "pageNum", "class=myLinkCSS");
     *
     *  +--------------------------------------------------------------------------+ 
     *  | 声明:                                                                    |
     *  | 本代码可以自由使用在任何商业和非商业, 开源与非开源程序中,                |
     *  | 任何人可以自由使用, 修改, 分发和再次分发,                                |
     *  | 您获得以上权利的前提条件是: 您在您的代码以及您的修改版本代码中,          |
     *  | 必须完整的包含本声明的完整内容.                                          |
     *  |                                                                          |
     *  | 本程序原始版本(v1.0) 由 Alex Lee 完成,                                  |
     *  | Alex Lee 具有此版本(v1.0)的所有权利以及以后版本的修改以及再发布权限      |
     *  | Email: [email protected]                                             |
     *  +--------------------------------------------------------------------------+
     *
     */
    class Page{
    var $firstPage; // 起始页码, int
    var $curPage; // 当前页码, int
    var $prevPage; // 上一页,   int
    var $nextPage; // 下一页,   int
    var $pageSize; // 页面大小, int
    var $totalPage; // 总页数,   int
    var $toatlItem; // 总记录数, int
    var $encode // 设置编码, string var $db; // 数据库链接句柄, 
    // 此处使用 adodb 链接数据库, 
    // 如果使用其他链接方式, 需要稍做改动 resource
    var $sql; // 查询sql语句   string
    var $rs; // 存放结果的结果集,  array;
    /**
     *  构造函数, 检查和初始化变量
     *  参数:
     *      $db: ADODB 数据库连接句柄
     * $sql: select 查询sql
     * $curpage: 当前页面编码
     *      $encode: 结果集编码
     * $pageSize: 页面大小
     */
    function Page($db, $sql, $curpage = 1, $encode = "gbk", $pageSize = 20){
    $this->db = $db;
    $this->firstPage = 1;
    $this->curPage = $curpage;
    $this->pageSize = $pageSize;
    $this->sql = $sql;
    $this->encode = $encode;
    $this->rs = NULL;

    if(!$this->db){
    exit("ERROR: invalid database connection");
    }
    if(FALSE === strpos(strtoupper($this->sql), "SELECT")){
    exit("ERROR: invalid SQL:".$this->sql);
    }
    if(!is_int($this->pageSize) || $this->pageSize == 0){
    $this->pageSize = 20;
    } $this->TotalPage(); if(empty($this->curPage)) $this->curPage = $this->firstPage;
    if($this->curPage >= $this->totalPage) $this->curPage = $this->totalPage;
    if($this->curPage <= $this->firstPage) $this->curPage = $this->firstPage; $this->nextPage = $this->curPage == $this->totalPage ? $this->totalPage : $this->curPage + 1;
    $this->prevPage = $this->curPage == $this->firstPage ? $this->firstPage : $this->curPage - 1;
    }
    /**
     * 设置结果集编码
     */
    function setResultEncode(){
    if(!empty(trim($this->encode))){
    $this->db->Execute("SET NAMES '".($this->encode)."'");
    }
    }
    /**
     * 构造分页sql
     */
    function prepareQuerySQL(){
    $sql = $this->sql;
    if(FALSE !==($pos = strpos(strtoupper($sql), "LIMIT"))){
    $sql = substr($this->sql, 0, $pos);
    }
    $sql .= " LIMIT ".(($this->prevPage - 1) * $this->pageSize).", ".$this->pageSize;

    return $sql;
    }    /**
     * 获取下一页记录
     */
    function nextPage(){ $sql = $this->prepareQuerySQL(); $this->setResultEncode(); $hdl = $this->db->Execute($sql);
    for($i = 0; !$hdl->EOF; $i++){
    $this->rs[] = $hdl->fields;
    $hdl->MoveNext();
    }
    } /**
     * 获取上一页记录
     */
    function prevPage(){
    $sql = $this->prepareQuerySQL(); $this->setResultEncode(); $hdl = $this->db->Execute($sql);
    for($i = 0; !$hdl->EOF; $i++){
    $this->rs[] = $hdl->fields;
    $hdl->MoveNext();
    }
    }
    /**
     * 获取当前页记录, 此函数较上边两个函数常用
     */
    function curPage(){ $sql = $this->prepareQuerySQL(); $this->setResultEncode(); if($hdl = $this->db->Execute($sql)){
    for($i = 0; !$hdl->EOF && $hdl; $i++){
    $this->rs[] = $hdl->fields;
    $hdl->MoveNext();
    }
    }
    } /**
     * 设置 总页数和总记录数
     */
    function TotalPage(){

    if(FALSE === ( $pos = strpos(strtoupper($this->sql), "FROM"))){
    exit("ERROR: invalid SQL:".$sql);
    }
    //$sql = "SELECT COUNT(*) AS totalItem ".substr($this->sql, $pos);
    $sql = "SELECT COUNT(*) AS totalItem FROM (".$this->sql.") a ";
    $hdl = $this->db->Execute($sql);
    if($hdl && !$hdl->EOF){
    $this->totalItem = $hdl->fields['totalItem'];
    $this->totalPage = ceil($this->totalItem / $this->pageSize);
    $this->totalPage = $this->totalPage <= 0 ? 1 : $this->totalPage;
    }else{
    $this->totalItem = 0;
    $this->totalPage = 1;
    }
    }
    /**
     * 返回分页的链接
     * 参数:
     * $url: 链接地址,
     * $arg: 页码的参数名, 比如 page=2 中的page
     * $style: 链接的CSS, eg: class=mylink 或者 style="{FONT:12px}"
     * 返回: 链接字符串
     */
    function pageLink($url, $arg, $style=""){

    $arr = parse_url($url);
    $url = "";
    if(!empty($arr['scheme'])) $url .= $arr['scheme']."://";
    if(!empty($arr['user'])){
    if(empty($arr['pass'])) $url .= $arr['user']."@";
    else $url .= $arr['user'].":".$arr['pass']."@";
    }
    if(!empty($arr['host'])) $url .= $arr['host'];
    if(!empty($arr['port'])) $url .= ":".$arr['port'];
    if(!empty($arr['path'])) $url .= $arr['path']; $line .= "共".$this->totalItem."条记录 &nbsp; &nbsp; 共".$this->totalPage."页 &nbsp; &nbsp; 第".$this->curPage."页 &nbsp; &nbsp; ";
    if($this->totalPage == 1){
    $line .= "首页 &nbsp; &nbsp; 上一页 &nbsp; &nbsp; ";
    $line .= "下一页 &nbsp; &nbsp; 末页";
    }
    else{
    if($this->curPage <= $this->firstPage){
    $line .= "首页 &nbsp; &nbsp; 上一页 &nbsp; &nbsp; ";
    $line .= " <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->nextPage.">下一页</a> &nbsp; &nbsp; <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->totalPage.">末页</a>";
    }
    if($this->curPage >= $this->totalPage){
    $line .= "<a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->firstPage.">首页</a> &nbsp; &nbsp; <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->prevPage.">上一页</a> &nbsp; &nbsp; ";
    $line .= "末页 &nbsp; &nbsp; 下一页 &nbsp; &nbsp; ";
    }
    if($this->curPage > $this->firstPage && $this->curPage < $this->totalPage){
    $line .= "<a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->firstPage.">首页</a> &nbsp; &nbsp; <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->prevPage.">上一页</a> &nbsp; &nbsp; ";
    $line .= " <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->nextPage.">下一页</a> &nbsp; &nbsp; <a ".$style." href=".(empty($arr['query']) ? $url."?" : $url."?".$arr['query']."&").$arg."=".$this->totalPage.">末页</a>";
    }
    }
    return $line;
    }}
    ?>
      

  14.   

    ROWNUM函数对查询结果按照顺序分配自增行序号
    $sql_AZSQD="SELECT * FROM (SELECT ROWNUM ID,s_QZJX_AZSQD.* FROM s_QZJX_AZSQD) A WHERE A.ID BETWEEN 10 AND 30";
      

  15.   

    分页类应该把数据和html分开,表现内容应该用js去做。这样比较清晰。sql语句最好也不要放到类里。
      

  16.   

    to fredyj(醉爱酸奶):
    读取记录是这样的:
    $sql_AZSQD="select * from s_QZJX_AZSQD where ejdwbm='$coid' and substr(sblbdm,1,2)='$id' order by sqdbh desc";
    $result_AZSQD=OciParse($DBCONN,$sql_AZSQD);
    ociexecute($result_AZSQD);
    while (OciFetchInto ($result_AZSQD, &$arr_AZSQD))
    {
       for ($i=0;$i<74;$i++)
      {
          echo $arr_AZSQD[$i];
          echo"</td><td>";
       }

    谢谢帮忙啊
      

  17.   

    for ($i=0;$i<74;$i++)
    74是什么值?,应该是你字段的总数,你的数据库s_QZJX_AZSQD表有74个字段?
    你这样是不是只显示了一条记录?
      

  18.   

    谢楼上,不会只显示一条,因为我的for外面还有一层while (OciFetchInto ($result_AZSQD, &$arr_AZSQD)),显示的是全部记录
      

  19.   

    谢谢大家的帮忙,我通过查询资料,问题已解决,采用的是http://tech.72e.net/html/program/php/4849.html这上面介绍的方法
      

  20.   

    晕了……这东西最好使用就是limit而且,limit是MySQL独有的东西。使用了limit之后,你会发现,实际上问题非常简单
      

  21.   

    to yanghuaiying66():假设每页显示20条,那么你第i页的起始显示的条数为
    ($i - 1) * 20; 结束条数为$i * 20 - 1;
    也就是数组的第($i - 1) * 20到$i * 20 - 1项
    其实你得到了这数据后用limit ($i - 1) * 20, $i * 20 - 1;
    就可以了.你想过没如果你的数据量很大,是不可能把它放到一个string中的.但以上方法超过string的可能性比较小.