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 相关文章推荐
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
Symfony生成二维码的方法
Feb 04 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP lcfirst()函数定义与用法
Mar 08 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php实现的农历算法实例
2015/08/11 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
Javascript的闭包详解
2014/12/26 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python实现双色球随机选号
2020/01/01 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python实现简单井字棋游戏
2020/03/04 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
校园摄影活动策划方案
2014/02/05 职场文书
创新型城市实施方案
2014/03/06 职场文书
辩论赛主持词
2014/03/18 职场文书
银行转正自我鉴定
2014/09/29 职场文书
教师节倡议书2015
2015/04/27 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers