ホームページ >php教程 >php手册 >php mssql ページング SQL ステートメントの最適化 継続的な影響

php mssql ページング SQL ステートメントの最適化 継続的な影響

WBOY
WBOYオリジナル
2016-06-13 12:24:38913ブラウズ

コードをコピー コードは次のとおりです:


/**
* @Filename :page.sql.class.php
* @CreatTime :2009-01-06
* @Description: このクラスは 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) 、ts_gcb からの Fbsl,jcsl where Ssh like 'C%' order by Lsh asc) AS inner_tbl ORDER BY Lsh DESC) AS inner_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();
}
function getpage(){ //現在のページ
$this->allpage=ceil( $this->allcount/$this->pagesize);//現在の 10 進数の最大の整数に移動します
if ($this-> page=="" または $this ->page>$this->allpage または $this->page<0 または $this->page==0){
$this->page2= 1;
}else{
$this->page2=intval($this->page);//ページ番号を数値に変換します
}
}
関数 gettop() { //サブクエリ 2 の TOP サイズを取得します
if ($this->page2<$this->allpage){
$this->top2=$this->}else; {
$this ->top2=$this->allcount-$this->pagesize*($this->allpage-1)
}
}
/* 関数getsql(){// SQL ステートメントを取得します
$this->s=preg_replace("/select/i","",$this->sql);
$this->top1= $this->pagesize* $this->page2;
$this->top1 $this->s"; ->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;
}*/
関数 getql()
$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('/bASCb|bDESCb/i', '', $order));
}
$sql = preg_replace('/^SELECTs/i', ' SELECT TOP ' . ($this->top1) . ' ', $sql);
$sql = 'SELECT * FROM (SELECT TOP ' . $this->top2 . ' * FROM (' . $sql) . ') AS inner_tbl';
if ($orderby !== false) {
$sql .= ' $order . ' '; , 'asc') !== false) ? 'DESC' : 'ASC';
}
$sql .= ') AS external_tbl'; ($orderby !== false) {
$sql .= ' ORDER BY ' . $sort;
$sql を返す
}
? >



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。