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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
php session处理的定制
Mar 16 PHP
PHP生成UTF8文件的方法
May 15 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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
图书管理程序(一)
2006/10/09 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
three.js实现圆柱体
2018/12/30 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
python抽象基类用法实例分析
2015/06/04 Python
Python内置函数OCT详解
2016/11/09 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
校园十大歌手策划书
2014/02/01 职场文书
《雾凇》教学反思
2014/02/17 职场文书
教研处工作方案
2014/05/26 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android