• 技术文章 >php教程 >php手册

    php mssql 分页SQL语句优化 持续影响

    2016-06-13 12:24:38原创387

    复制代码 代码如下:


    /**
    * @Filename :page.sql.class.php
    * @CreatTime :2009-01-06
    * @Descrition :此类为SQL语句处理类。
    * @UpdateTime-1 :null
    * @Version :jswweb1.0.0
    * @Author :fkedwgwy
    * @Dome :
    $sql//SQL语句
    $allcount//总记录数
    $pagesize//页面显示记录条数
    $page//当前页
    $sqlc= new sqlpage($sql,$allcount,$pagesize,$page);
    $sql=$sqlc->getsql();
    优化后的语句:
    SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 270 Lsh,Ztm,Dyzrsm,Dyzzfs,Cbsm,Cbny,Ssh,Fbsl,jcsl from ts_gcb where Ssh like 'C%' order by Lsh asc) AS inner_tbl ORDER BY Lsh DESC) AS outer_tbl ORDER BY Lsh asc
    */
    class sqlpage{
    function sqlpage($sql,$allcount,$pagesize,$page){
    $this->sql= $sql;//查询语名
    $this->allcount= intval($allcount);//总记录数
    $this->pagesize= intval($pagesize);//页面大小(显示记录数)
    $this->page= intval($page);//当前页
    $this->getpage();
    $this->gettop();
    }
    function getpage(){ //获取当前页
    $this->allpage=ceil( $this->allcount/$this->pagesize);//去当前小数的最大整数
    if ($this->page=="" or $this->page>$this->allpage or $this->page<0 or $this->page==0){
    $this->page2=1;
    }else{
    $this->page2=intval($this->page);//将页码转换为数字
    }
    }
    function gettop(){ //获取子查询2的TOP大小
    if ($this->page2<$this->allpage){
    $this->top2=$this->pagesize;
    }else{
    $this->top2=$this->allcount-$this->pagesize*($this->allpage-1);
    }
    }
    /* function getsql(){//获取SQL语句
    $this->s=preg_replace("/select/i","",$this->sql);
    $this->top1=$this->pagesize*$this->page2;
    $this->sql1="SELECT TOP $this->top1 $this->s";
    if (strpos($this->sql,"asc")){//升序
    $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC";
    }else
    //$this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC";
    if (strpos($this->sql,"desc")){//降序
    $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order asc ) as bSysTable ORDER BY $this->order desc";
    }else{//不处理排序的情况
    $this->sql_e="select * from ( select TOP $this->top2 * FROM ( $this->sql1 ) as aSysTable ORDER BY $this->order DESC ) as bSysTable ORDER BY $this->order ASC";
    }
    // echo $this->sql_e;
    return $this->sql_e;
    }*/
    function getsql()
    {
    $sql=$this->sql;
    $this->top1=$this->pagesize*$this->page2;
    $orderby = stristr($sql, 'ORDER BY');
    if ($orderby !== false) {
    $sort = (stripos($orderby, ' desc') !== false) ? 'desc' : 'asc';
    $order = str_ireplace('ORDER BY', '', $orderby);
    $order = trim(preg_replace('/\bASC\b|\bDESC\b/i', '', $order));
    }
    $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($this->top1) . ' ', $sql);
    $sql = 'SELECT * FROM (SELECT TOP ' . $this->top2 . ' * FROM (' . $sql . ') AS inner_tbl';
    if ($orderby !== false) {
    $sql .= ' ORDER BY ' . $order . ' ';
    $sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
    }
    $sql .= ') AS outer_tbl';
    if ($orderby !== false) {
    $sql .= ' ORDER BY ' . $order . ' ' . $sort;
    }
    echo $sql;
    return $sql;
    }
    }
    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php执行sql语句的写法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php多文件上传实现代码• PHP 修改RAR文件注释及添加压缩文档讲解• php:统计邮件的大小方法• 如何配置Eclipse php xdebug(附代码)• PHP中Unicode的签名问题
    1/1

    PHP中文网