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作的文本留言本的例子(四)
Oct 09 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php中的strpos使用示例
Feb 27 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
php 常用的系统函数
Feb 07 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
php接口实现拖拽排序功能
Apr 23 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
Laravel5.1 框架路由基础详解
Jan 04 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生成文件
2007/01/15 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
java解析json方法总结
2019/05/16 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
python中@contextmanager实例用法
2021/02/07 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
环境工程大学生个人的自我评价
2013/10/08 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
督导岗位职责
2015/02/04 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
Consul在linux环境的集群部署
2022/04/08 Servers
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android