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 相关文章推荐
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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面向对象 字段的声明与使用
2012/06/14 PHP
PHP积分兑换接口实例
2015/02/09 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python轮询机制控制led实例
2020/05/03 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
教师的实习鉴定
2013/12/15 职场文书
八年级物理教学反思
2014/01/19 职场文书
学雷锋演讲稿
2014/03/04 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
开国大典观后感
2015/06/04 职场文书
《称赞》教学反思
2016/02/17 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
html form表单基础入门案例讲解
2021/07/21 HTML / CSS