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 危险函数全解析
Sep 09 PHP
php mail to 配置详解
Jan 16 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP导出Excel实例讲解
Jan 24 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
PHP实现简易用户登录系统
Jul 10 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 页面编码声明方法详解(header或meta)
2010/03/12 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
windows下python安装pip图文教程
2018/05/25 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python中extend和append的区别讲解
2019/01/24 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
生日寿宴答谢词
2014/01/19 职场文书
年度考核自我评价
2014/01/25 职场文书
财产公证书格式
2014/04/10 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书