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 相关文章推荐
PHP 事务处理数据实现代码
May 13 PHP
php将时间差转换为字符串提示
Sep 07 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php实现表单提交上传文件功能
May 28 PHP
PHP实现微信对账单处理
Oct 01 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
PHP copy函数使用案例代码解析
Sep 01 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
phpinfo 系统查看参数函数代码
2009/06/05 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python实现邮件发送功能
2019/08/10 Python
Python argparse模块应用实例解析
2019/11/15 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
网络宣传方案
2014/03/15 职场文书
乔迁之喜主持词
2014/03/27 职场文书
文化活动实施方案
2014/03/28 职场文书
成绩单公证书
2014/04/10 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书