mybatisPlus下mysql轉sqlServer 資料遷移和語法對比
阿新 • • 發佈:2020-12-11
分頁思想
- 獲取當前頁碼的資料
頁碼 SQL語句
1 select * from products limit 0,10
2 select * from products limit 10,10
3 select * from products limit 20,30
-
公式
$pageno
頁碼$startno
起始位置$pagesize=10
頁面大小$startno= ($pageno- 1)* $pagesize;
-
獲取頁碼
- 使用者點選頁面底端頁碼,傳遞當前的頁面
-
獲取總頁碼
記錄數 頁數 計算 60 6 60/10=6 51 6 ceil(51/10)=6
-
公式
$rowcount
總記錄數$pagecount
總頁數$pagecount= ceil($rowcount/ $pagesize);
-
獲取總記錄數
select count(*) from products;
實現方法
- 步驟
- 獲取總記錄數
- 求出總頁數
- 迴圈顯示頁碼
- 通過當前頁面,求出起始位置
- 獲取當前頁面資料,並遍歷顯示
程式碼實現
連線資料庫
# MySQLDB.class.php <?php class MySQLDB { private $host; // 主機地址 private $port; // 埠號 private $user; // 使用者名稱 private $pwd; // 密碼 private $dbname; // 資料庫名 private $charset; // 字符集 private $link; // 連線物件 private static $instance; private function __construct($param){ $this->initParam($param); $this->initConnect(); } private function __clone(){ } // 獲取單例 public static function getInstance($param= array()){ if(!self::$instance instanceof self){ self::$instance= new self($param); } return self::$instance; } // 初始化引數 private function initParam($param){ $this->host= $param['host']??'127.0.0.1'; $this->port= $param['port']??'3306'; $this->user= $param['user']??''; $this->pwd= $param['pwd']??''; $this->dbname= $param['dbname']??''; $this->charset= $param['charset']??'utf8'; } // 連線資料庫 private function initConnect(){ $this->link= @mysqli_connect($this->host, $this->user, $this->pwd, $this->dbname, $this->port); if(mysqli_connect_error()){ echo '資料庫連線失敗<br>'; echo '錯誤資訊:'.mysqli_connect_error(),'<br>'; echo '錯誤碼:'.mysqli_connect_errno(),'<br>'; exit; }else{ echo '資料庫連線成功!'; } mysqli_set_charset($this->link, $this->charset); } // 資料庫的增刪改查 private function execute($sql){ if(!$rs= mysqli_query($this->link, $sql)){ echo 'SQL語句執行失敗<br>'; echo '錯誤資訊:'.mysqli_error($this->link),'<br>'; echo '錯誤碼:'.mysqli_errno($this->link),'<br>'; echo '錯誤的SQL語句:'.$sql,'<br>'; exit; } return $rs; } // 執行增刪改語句 public function exec($sql) { $key=substr($sql,0,6); if(in_array($key,array('insert','update','delete'))) return $this->execute($sql); else{ echo '非法訪問<br>'; exit; } } //獲取自動增長的編號 public function getLastInsertId() { return mysqli_insert_id($this->link); } //執行查詢語句 private function query($sql) { if(substr($sql,0,6)=='select' || substr($sql,0,4)=='show' || substr($sql,0,4)=='desc'){ return $this->execute($sql); }else{ echo '非法訪問<br>'; exit; } } //匹配所有資料 public function fetchAll($sql,$type='assoc') { $rs=$this->query($sql); $type=$this->getType($type); return mysqli_fetch_all($rs,$type); } //匹配一維陣列 public function fetchRow($sql,$type='assoc') { $list=$this->fetchAll($sql,$type); if(!empty($list)) return $list[0]; return array(); } //匹配一行一列 public function fetchColumn($sql) { $list=$this->fetchRow($sql,'num'); if(!empty($list)) return $list[0]; return null; } //獲取匹配型別 private function getType($type) { switch($type){ case 'num': return MYSQLI_NUM; case 'both': return MYSQLI_BOTH; default: return MYSQLI_ASSOC; } } }
顯示頁
# index.php <?php //自動載入類 spl_autoload_register(function($class_name){ require "./{$class_name}.class.php"; }); //獲取單例 $param=array( 'user' => 'root', 'pwd' => '', 'dbname' => 'data' ); $db= MySQLDB::getInstance($param); ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>資料庫連線</title> <style type="text/css"> table{ width:780px; border:solid #000 1px; } td,th{ border:solid #000 1px; } </style> </head> <body> <?php $pagesize= 5; //第一步:獲取總記錄數 $rowcount= $db->fetchColumn('select count(*) from products'); //第二步:求出總頁數 $pagecount= ceil($rowcount/$pagesize); //第四步:通過當前頁面,求出起始位置 //$pageno=isset($_GET['pageno'])?$_GET['pageno']:1; $pageno= $_GET['pageno']??1; $pageno= $pageno<1?1:$pageno; $pageno= $pageno>$pagecount?$pagecount:$pageno; $startno= ($pageno-1)*$pagesize; //第五步:獲取當前頁面資料,並遍歷顯示 $sql= "select * from products limit $startno,$pagesize"; $rs= $db->fetchAll($sql); ?> <table> <tr> <th>編號</th> <th>商品名稱</th> <th>規格</th> <th>價格</th> </tr> <?php foreach($rs as $row):?> <tr> <td><?=$row['proID']?></td> <td><?=$row['proname']?></td> <td><?=$row['proguige']?></td> <td><?=$row['proprice']?></td> </tr> <?php endforeach;?> </table> <!--第三步:迴圈顯示頁碼--> <span>一共有<?=$rowcount?>條記錄,每頁放<?=$pagesize?>條記錄,當前是<?=$pageno?>頁 <br></span> 【<a href="?pageno=1">首頁</a>】 【<a href="?pageno=<?=$pageno-1?>">上一頁</a>】 <?php for($i=1; $i<=$pagecount; $i++):?> <a href="?pageno=<?=$i?>"><?=$i?></a> <?php endfor;?> 【<a href="?pageno=<?=$pageno+1?>">下一頁</a>】 【<a href="?pageno=<?=$pagecount?>">末頁</a>】 </body> </html>
分頁優化
-
概述
- 在上面的分頁程式碼中,雖然SQL語句比較經典
- 但是每次都要獲取不需要的資料,浪費資源
-
優化
$sql="select * from products limit $startno,$pagesize";
$sql="select * from products where proid>=(select proid from products limit $startno,1) limit $pagesize";