67. 查询分页数据(2)
1. mysql 自我复制
insert into 表名(值,,,) select 值,,, from 表名;
2.打印出页码的超链接—改进
<?phpif($pageNow>1){$prePage = $pageNow-1;echo "<a href='empList.php?pageNow=$prePage'>上一页</a> ";}echo "当前页{$pageNow}/共{$pageCount} ";if($pageNow<$pageCount){$nextPage = $pageNow+1;echo "<a href='empList.php?pageNow=$nextPage'>下一页</a> ";}echo "<br/><br/>";
?><form action="">跳转到:<input type="text" name="pageNow"/><input type="submit" value="Go">
<form>
3. 分层开发模式:
SqlHelper.class.php<?phpclass SqlHelper{public $conn;public $dbname = 'test';public $username = 'root';public $password = '123456';public $host = 'localhost';public function __construct(){$this->conn = new MySQLi($this->host,$this->username,$this->password,$this->dbname);if($this->conn->connect_error){die('connect error:' . $this->conn->connect_error);}}//执行 dql 语句public function execute_dql($sql){$res = $this->conn->query($sql) or die($this->conn->error);return $res;}//执行 dml 语句public function execute_dml($sql){$b = $this->conn->query($sql);if(!$b){return 0;}else{if($this->conn->affected_rows>0){return 1;}else{return 2; //没有行受影响}}}//关闭连接的方法public function close_connect(){if(!empty($this->conn)){}}
}
Admin.class.php<?php//它的一个对象实例,就表示admin表的一条记录
class Admin
{private $id; //每个字段为一个成语属性private $name;private $password;public function getId(){return $this->id;}public function getName(){return $this->name;}public function getPassword(){return $this->password;}public function setId($id){$this->id = $id;}public function setName($name){$this->name = $name;}public function setPassword($password){$this->password = $password;}
}
AdminService.class.php<?phprequire_once 'SqlHelper.class.php';
//该类是一个业务逻辑处理类,主要完成对amdin表的操作class AdminService
{//提供一个验证用户是否合法的方法public function checkAdmin($id,$password){$sql = "select password,name from admin where id=$id;";//创建一个 SqlHelper 对象$sqlHelper = new SqlHelper();$res = $sqlHelper->execute_dql($sql);if($row = $res->fetch_assoc()){//比对密码if($password == $row['password']){return $row['name'];}}//释放资源$res->free();$sqlHelper->close_connect();return false;}
}
loginProcess.php<?php
require_once 'AdminService.class.php';$id = $_POST['id'];$password = $_POST['password'];//实例化一个AdminService方法
$adminService = new AdminService();
if($name = $adminService->checkAdmin($id,$password)){//合法header("Location:empManage.php?name=$name");exit();
}else{//非法header('Location:login.php?errno=1');exit();
}
4. 使用分层模式来完成雇员信息分页功能
EmpService.class.php<?php//一个函数可以获取共有多少页require_once 'SqlHelper.class.php';class EmpService
{function getPageCount($pageSize){//需要查询 $rowCount$sql = "select count(id) from emp;";$sqlHelper = new SqlHelper();$res = $sqlHelper->execute_dql($sql);//这样就可以计算 $pageCountif($row = $res->fetch_row()){$pageCount = ceil($row[0]/$pageSize);}//释放资源$res->free();//关闭连接$sqlHelper->close_connect();return $pageCount;}//一个函数可以获取应当显示的雇员信息public function getEmpListByPage($pageNow,$pageSize){$sql = "select * from emp limit " . ($pageNow - 1)*$pageSize . ",$pageSize";$sqlHelper = new SqlHelper();$res = $sqlHelper->execute_dql($sql);//关闭连接$sqlHelper->close_connect();return $res;}
}
SqlHelper.class.php<?phpclass SqlHelper{public $conn;public $dbname = 'test';public $username = 'root';public $password = '123456';public $host = 'localhost';public function __construct(){$this->conn = new MySQLi($this->host,$this->username,$this->password,$this->dbname);if($this->conn->connect_error){die('connect error:' . $this->conn->connect_error);}}//执行 dql 语句public function execute_dql($sql){$res = $this->conn->query($sql) or die($this->conn->error);return $res;}public function execute_dql2($sql){$arr = array();$res = $this->conn->query($sql) or die($this->conn->error);//把$res = >$arrwhile($row = $res->fetch_row()){$arr[] = $row;}//这里就可以立即关闭资源$res->free();return $arr;}//执行 dml 语句public function execute_dml($sql){$b = $this->conn->query($sql);if(!$b){return 0;}else{if($this->conn->affected_rows>0){return 1;}else{return 2; //没有行受影响}}}//关闭连接的方法public function close_connect(){if(!empty($this->conn)){}}
}
empList.php<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head><body>
<?php require_once 'EmpService.class.php'; //显示所有用户的信息(表格) //查询数据库 $mysqli = new MySQLi('localhost','root','123456','test'); if($mysqli->connect_error){ die('connect error' . $mysqli->connect_error); } $mysqli->set_charset('utf8') or die($mysqli->error); $pageSize = 6; $rowCount = 0; $pageNow = 1; if(!empty($_GET['pageNow'])){ $pageNow = $_GET['pageNow']; } //创建 EmpService 对象实例 $empService = new EmpService(); //调用 getPageCount 方法,获取到共有多少页 $pageCount = $empService->getPageCount($pageSize); //调用getEmpListBYPage 获取到应当显示的雇员列表 $res2 = $empService->getEmpListByPage($pageNow,$pageSize); /*$sql = "select * from emp limit " . ($pageNow - 1)*$pageSize . ",$pageSize";*/ //var_dump($sql);die(); //$sql = "select * from emp limit 0,2;"; //$res2 = $mysqli->query($sql); if(!$res2){ die($mysqli->error); } while($row = $res2->fetch_row()){ $rows[] = $row; } $res2->free(); $mysqli->close(); ?>
<h1>雇员信息列表</h1>
<table border="1" cellpadding="0" cellspacing="0" width="80%"><tr><th>id</th><th>name</th><th>grade</th><th>email</th><th>salary</th><th>操作</th></tr><?php foreach($rows as $row):?><tr><td><?php echo $row[0];?></td><td><?php echo $row[1];?></td><td><?php echo $row[2];?></td><td><?php echo $row[3];?></td><td><?php echo $row[4];?></td><td><a href="">删除用户</a>|<a href="">修改用户</a></td></tr><?php endforeach;?>
</table>
<?php if($pageNow>1){ $prePage = $pageNow-1; echo "<a href='empList.php?pageNow=$prePage'>上一页</a> "; } echo "当前页{$pageNow}/共{$pageCount} "; if($pageNow<$pageCount){ $nextPage = $pageNow+1; echo "<a href='empList.php?pageNow=$nextPage'>下一页</a> "; } echo "<br/><br/>"; ?><form action="">跳转到:<input type="text" name="pageNow"/><input type="submit" value="Go"><form><?php /* //打印出页码的超链接 for($i=1;$i<=$pageCount;$i++){ echo "<a href='empList.php?pageNow=$i'>$i</a> "; } */?></body>
</html>
应用偏移量的思路:
<?php
$page = $_GET['page'];$mysqli = new MySQLi('localhost','root','123456','test');if($mysqli->connect_error){die($mysqli->connect_error);
}$sql = "select * from test limit " . ($page-1)*2 . ",2";$res = $mysqli->query($sql);
if(!$res){die($mysqli->error);
}while($row = $res->fetch_row())
{$rows[] = $row;
}$res->free();$sql2 = "select count(*) from test;";
$res2 = $mysqli->query($sql2);
if($row = $res2->fetch_row()){$rowCount = $row[0];
}
$res2->free();$pageCount = ceil($rowCount/2);
$mysqli->close();$showPage = 5; //总共要显示多少
$pageOffset= ($showPage-1)/2; //偏移量,以偏移量为参考
?><html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="1" width="80%"><tr><td>id</td><td>name</td></tr><?php foreach($rows as $row):?><tr><td><?php echo $row[0];?></td><td><?php echo $row[1];?></td></tr><?php endforeach;?>
</table>
<?php if($page>1):?><a href="<?php echo $_SERVER['PHP_SELF'] . '?page=1'?>">首页</a><a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . ($page-1);?>">上一页</a>
<?php endif;?>
<?php$start = 1;$end = $start+4;if($page-$pageOffset<=0){$start = 1;$end = $start +4;}elseif($page+$pageOffset<=$pageCount){$start = $page-2;$end = $page + 2;}else{$start = $pageCount - 4;$end = $pageCount;}
?>
<?php if($start != 1):?><a>...</a>
<?php endif;?>
<?php for($i=$start;$i<=$end;$i++):?><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=$i"?>"><?php echo $i;?></a>
<?php endfor;?>
<?php if($end != $pageCount):?><a>...</a>
<?php endif;?>
<?php if($page != $pageCount):?><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=" . ($page+1);?>">下一页</a><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=$pageCount"?>">尾页</a>
<?php endif;?></body>
</html>
67. 查询分页数据(2)相关推荐
- 分页数据做缓存的思考
当我们进行java开发时,当遇到页面数据过多或者复杂,会有很多慢sql,此时除了优化sql外,还可以通过缓存的方式来处理: 有如下方案: 1.整个页面做缓存,key为页数,value为整个页面的数据 ...
- php查询mysql表里的数据_PHP/MYSQL 查询大数据/遍历表
PHP:PHP 5.3.6 (cli) (built: Jun 15 2011 16:29:50) MYSQL:5.1.51 如果我们有的一张表有几百万或几千万的记录,我们要使用 PHP 将所有的记录 ...
- 适合千万数据查询分页操作的一个通用存储过程
适合千万数据查询分页操作的一个通用存储过程 一.引言 最近上班比较忙,所以就很少写东西了,MongoDB系列的文章也要拖后了,没办法,工作第一,没工作就没饭吃了.今天正好 ...
- Bootstrap4+MySQL前后端综合实训-Day06-PM【MD5加码-生成32位md5码、ResultData.java、分页查询用户数据、添加用户按钮的实现】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目录 MD5加码 生成32位md5码 ResultData.java 分页查询 ...
- 分页查询有数据无数据源问题
分页查询有数据无数据源问题 使用前端查询有数据但无数据源问题 问题详情 具体问题演示 代码演示 解决办法 使用前端查询有数据但无数据源问题 问题详情 表格有自带的分页功能,后台分页主要是通过传{lim ...
- 黑马旅游网——分页数据展示(难点)和旅游线路名称查询
狗都能看懂的代码分析!!!,虽然这一块比较绕但是我还是决定让狗都能看懂 期望效果: 数据展示功能: 当我们点击分页展示栏中任意一页时,就会展示相应板块(cid)的数据 如我们点击国内游(cid=5), ...
- SQL数据库查询LIMIT 数据分页
SQL数据库查询LIMIT 数据分页 SQL的语句LIMIT 约束SELECT 查询数据包表时,使得SQL查询语句返回指定的记录数(行数).LIMIT 可以设置1个或2个int整型常量数字作为参数.L ...
- 使用forkjoin框架分页查询所有数据的例子
使用forkjoin框架分页查询所有数据的例子 import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor ...
- php计算是否有下一页,怎么进行分页数据的查询,如何判断是否有下一页?
怎么进行分页数据的查询,如何判断是否有下一页? 1.背景介绍 在开发过程当中,接触比较多的有MySQL.SQLServer.Oracle这三种数据库,这三种数据库都有自己内部的方法可以进行分页查询,M ...
- 数据查询分页显示的优化方法
现有方法: 开始时间 [@start_dt ] 结束时间 [@end_dt ] 其它条件 [ ] 查询数据总量:[XXXX] 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
最新文章
- 顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)
- Win7双击文件夹总是新窗口打开的解决方法
- 让我撸一次HashMap
- python毕业设计论文-25 行 Python 代码毕业设计实现人脸识别
- curl封装php,PHP封装curl的简单方法
- OpenCV2:幼儿园篇 第一章 创建图像并显示
- MAC itunes无法验证服务器s.mzstatic/itunes无法更新服务器解决方案
- 滑膜观测器物理意义_电机控制中的滑模控制(滑模观测器设计)
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
- 办公 自动化 录制行为_我们可以自动化开放行为吗?
- 一些值得好好学习的博客或者网站
- 老板不在,你不得不做出越权的决定,咋办?(考试题系列)
- spring security3.x学习(15)_扩展JdbcDaoImpl。
- Spark操作Hive分区表
- mybatis的源码学习
- SEH in ASM研究
- 如何从wireshark 抓包中的RTP导出 H.264 PAYLOAD,变成可用暴风直接播放的H264 裸码流文件
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)
- 知了课堂项目初始化数据库 进行数据迁移
- 【软件体系结构】软件体系结构笔记