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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
PHP入门学习笔记之一
Oct 12 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
input file获得文件根目录简单实现
Apr 26 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
PHP echo()函数讲解
Feb 15 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之第五天
2006/10/09 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php去除数组中重复数据
2014/11/18 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
详解redux异步操作实践
2018/08/15 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python中join和split用法实例
2015/04/14 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
解决python 文本过滤和清理问题
2019/08/28 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
前台文员岗位职责及工作流程
2013/11/19 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
房屋继承公证书
2014/04/10 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers