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 常用函数库和一些实用小技巧
Jan 01 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
php购物车实现代码
Oct 10 PHP
基于Zookeeper的使用详解
May 02 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
php和nginx交互实例讲解
2019/09/24 PHP
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
js 颜色选择插件
2017/01/23 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
Python 元类实例解析
2018/04/04 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
python实现控制台输出彩色字体
2020/04/05 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
VC++笔试题
2014/10/13 面试题
什么是网络协议
2016/04/07 面试题
2014年房地产销售工作总结
2014/12/01 职场文书
2019 入党申请书范文
2019/07/10 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS