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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
PHP新手上路(十一)
Oct 09 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
PHP的5个安全措施小结
Jul 17 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
php可变长参数处理函数详解
Feb 22 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
PHP 代码简洁之道(小结)
Oct 16 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
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
webpack多页面开发实践
2017/12/18 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
Python中暂存上传图片的方法
2015/02/18 Python
python实现的简单猜数字游戏
2015/04/04 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
python开发入门——列表生成式
2020/09/03 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
四年的个人工作自我评价
2013/12/10 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
工程招投标邀请书
2014/01/30 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript