自己写的mysql分页展示。

比较简单。传智韩老师的思想、可以直接拿来用哈。分层思想的。还没学习MVC,在这里先记录一下。

首先。把分页需要的信息都封装到一个类里面,ApartPage.class.php

<?php
    class ApartPage{
        public $rowCount;  //总共有多少行
        public $pageCount;  //总共有多少页
        public $pageNow=1;  //当前页
        public $pageSize=5;   //每页显示多少行
        public $res_array;    //select之后取回来的结果集等价的数组。
        public $page_whole=10;  //导航条一共有多少页,1 2 3 4 5 6 7 8 9 10
        public $navigator;    //页面下方的导航条字符串。
    }
    ?>

最底层对数据库操作的函数。

<?php
         public function execute_dql_apartpage($sql1,$sql2,$apartPage){
                 $res=$this->conn->query($sql1) or die($this->conn->error);//返回执行select count(id)得到的结果集
                if($row=$res->fetch_row()){
                 $apartPage->rowCount=$row[0];//利用sql1取出rowCount
             }
                 $res->free();//释放结果集
             //    var_dump($sql2);
             //    die();
                 $res2=$this->conn->query($sql2) or die($this->conn->error);//返回执行查询之后得到的结果集;,
                 $arr=array();
                 while ($row=$res2->fetch_row()) {
                     $arr[]=$row;//利用sql2取出所有的行数以及内容,并赋值给一个数组,方便直接释放资源。
                 }          $res2->free();//释放结果集
                 $apartPage->res_array=$arr;
                 $apartPage->pageCount=ceil($apartPage->rowCount/$apartPage->pageSize);
                 //以下内容显示导航条区域。
                 if($apartPage->pageNow>1){
                     $prePage=$apartPage->pageNow-1;
                     $apartPage->navigator="<a href=‘emplist.php?pageNow=$prePage‘>上一页</a>";
                 }

                 if ($apartPage->pageNow<$apartPage->pageCount) {
                 $nextPage=$apartPage->pageNow+1;
                 $apartPage->navigator.= "<a href=‘emplist.php?pageNow=$nextPage‘>下一页</a>";
                 }

                 $start=floor(($apartPage->pageNow-1)/$apartPage->page_whole)*$apartPage->page_whole+1;//这个数字就是下面的超链接数字排列的第一个数字的值。
                 $index=$start;//
                 for(;$start<$index+$apartPage->page_whole;$start++){

                     $apartPage->navigator.= "<a href=‘emplist.php?pageNow={$start}‘>[$start]&nbsp</a>";
                     //如果start增长到和页数一样了就跳出循环。
                 if ($start==$apartPage->pageCount) {
                         break;
                     }
                 }
                 if ($apartPage->pageNow<$apartPage->pageCount){
                     $apartPage->navigator.= "&nbsp&nbsp<a href=‘emplist.php?pageNow=$start‘>>></a>";//翻到下一个page_whloe页
                 }
             //    $page_whloe=;//底下的数字栏一共有多少个数字显示出来。
                  if($apartPage->pageNow>$apartPage->page_whole){

                 $preRow=(floor($apartPage->pageNow/$apartPage->page_whole)-1)*$apartPage->page_whole+1;//这里是确定

                 $apartPage->navigator.= "&nbsp&nbsp<a href=‘emplist.php?pageNow=$preRow‘><<</a>&nbsp&nbsp";//翻到上一个page_whole页。
                 }

                 //return $apartPage;
         }        ?>

在数据库操作的上一层,封装一个service类,调用底层的这个execute_dql_apartpage函数。EmpService.class.php

<?php
public function getApartPage($apartPage){
                $sqliHelper=new SqliHelper();
                $sql1="select count(id) from myemp";
                $rowBegin=$apartPage->pageSize*($apartPage->pageNow-1);
                $sql2="select * from myemp limit {$rowBegin},{$apartPage->pageSize}";
                $sqliHelper->execute_dql_apartpage($sql1, $sql2, $apartPage);
            }
?>

上面的函数调用之后,$apartPage对象里面就保存了所有分页需要的信息。

具体调用。

<?phprequire_once ‘EmpService.class.php‘;
require_once ‘ApartPage.class.php‘;

$apartPage=new ApartPage();
        $empService=new EmpService();
        //在getApartPage函数执行之前给pageNow赋值。
        if(isset($_GET[‘pageNow‘])){
            $apartPage->pageNow=$_GET[‘pageNow‘];
        }
        $empService->getApartPage($apartPage);

        for($i=0;$i<$apartPage->pageSize;$i++) {
            echo "<tr>";
            $row[email protected]$apartPage->res_array[$i];
            if(isset ($row)){//判断$row是否为空,不为空才进行下面的语句
            foreach ($row as $k=>$val){
                echo "<td>$val</td>";
            }
                            echo "</tr>";
        }
        }

        echo "</table>";
        //不能使用自增自减,会使得pageNow数据发生变化。用prePage和nextPage代替即可实现。

        echo $apartPage->navigator;//这里显示导航条 上一页 下一页 1 2 3 4 5 <<  >>等
    ?>

至此,分层模式的分页就完成了,其中最底层的execute_dql_apartpage,适用于对所有的数据库进行分页的操作,需要的参数就是一个查询数据库有多少条记录的语句,一个查询要显示的数据的语句。

这些内容都在具体的要服务的页面进行编写

时间: 2024-11-06 07:35:35

自己写的mysql分页展示。的相关文章

MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.

MySql 分页关键字(limit)

mysql分页关键字: limit m,n --m:表示从哪一行开始查,n:查询多少条 oracle分页关键字:: rownum SqlServer:top(2005以下版本)  row_number()(2005以后版本) 查询前10条数据: SELECT * FROM orderitems LIMIT 0,10 ##查询出前十条的数据从0开始 还可以这样写: SELECT * FROM orderitems LIMIT 10; ##查询出前十条数据 查询出第6条后面的5条数据: SELECT

mysql分页与分页性能查询优化

mysql分页就直接使用limit进行操作,limit如果我们直接不加任何处理可能数据大了就会很卡的. 一. 最常见MYSQL最基本的分页方式: select * from content order by id desc limit 0, 10 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引.随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似: select * from content order by id desc limit 10000,

解决mysql分页数据错乱问题

今天同事遇到个麻烦的问题,写了一个分页的功能,结果查出来的数据竟然有重复,有些数据同时在相邻的两页出现了, 但是查询总数据不分页的时候又只有一条,这里主要是排序的问题,在mysql中用 order by 排序的时候,如果排序字段中有相同的结果, 则排序结果是不确定的,每一个分页查询,这几个相同的数据就会乱序,导致查询的数据不准确,解决办法就是在需要用比较容易相等的 字段排序时,可以再增加一个排序字段,最后用id啥的,即:order by 字段A desc,Id desc; 记录一下,以后遇到了就

MySql分页查询慢|这里告诉你答案

一.背景 我们在开发的过程中使用分页是不可避免的,通常情况下我们的做法是使用limit加偏移量:select * from table where column=xxx order by xxx limit 1,20.当数据量比较小时(100万以内),无论你翻到哪一页,性能都是很快的.如果查询慢,只要在where条件和order by 的列上加上索引就可以解决.但是,当数据量大的时候(小编遇到的情况是500万数据),如果翻到最后几页,即使加了索引,查询也是非常慢的,这是什么原因导致的呢?我们该如

sqlserver分页;mysql分页;orcale分页 的sql 查询语句

1 一,sqlserver分页: 2 SELECT TOP (每页显示的数据条数) *FROM 表名 WHERE (ID NOT IN (SELECT TOP ((当前页码 -1)*每页显示的数据条数 -1) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 3 二:mysql分页 4 select * from 表名 where id limit((当前页码 -1)*每页显示的数据条数,当前页码 * 每页显示的数据条数); 5 三:orcale分页

springmvc+java+mysql分页条件查询自学代码

jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String b

sqlserver分页:mysql分页:orcale分页

一,sqlserver分页: SELECT   TOP (每页显示的数据条数) *FROM 表名 WHERE   (ID NOT IN (SELECT TOP ((当前页码 -1)*每页显示的数据条数 -1) ID FROM  表名 AS 表名1_1  ORDER BY ID)) ORDER BY ID; 二:mysql分页     select  * from 表名 where id limit((当前页码 -1)*每页显示的数据条数,当前页码 * 每页显示的数据条数); 三:orcale分页

MySql 分页存储过程

DELIMITER $$ #改动分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_MvcCommonDataSource ( #输入參数 _fields VARCHAR(2000), #要查询的字段,用逗号(,)分隔 _tables TEXT, #要查询的表 _where VARCHAR(2000), #查询条件 _orderby VARCHAR(200), #排序规则 _page