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


Posted in PHP onApril 26, 2009
<?php 
/** 
* @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; 
} 
} 
?>
PHP 相关文章推荐
ZF等常用php框架中存在的问题
Jan 10 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
解析argc argv在php中的应用
Jun 24 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
PHP中list方法用法示例
Dec 01 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 #PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 #PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 #PHP
PHP 危险函数解释 分析
Apr 22 #PHP
php反弹shell实现代码
Apr 22 #PHP
将数组写入txt文件 var_export
Apr 21 #PHP
php 保留小数点
Apr 21 #PHP
You might like
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
angular2模块和共享模块详解
2018/04/08 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
Python对数据库操作
2016/03/28 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
python银行系统实现源码
2019/10/25 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
做人民满意的公务员活动方案
2014/08/25 职场文书
大学教师个人总结
2015/02/10 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书