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 GeoIP的使用教程
Mar 09 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
实现php删除链表中重复的结点
Sep 27 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 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 Smarty模板生成html文档的方法
2010/04/12 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python中几个比较常见的名词解释
2015/07/04 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python3实现名片管理系统
2020/11/29 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
django迁移文件migrations的实现
2020/03/31 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
素质教育培训心得体会
2016/01/19 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL