php+MySQL实战案例【六】数据分页查询

 原计划本节学习的是编辑和删除用户信息,在案例开发过程中发现先把数据列表读取出来,再对列表的数据进行删除或修改更为合理,所以调整下学习顺序,先进行数据分页查询的学习,再对数据进行编辑和删除。

数据查询

    我们的数据实际是存储在MySql数据库中的某个表中,用sql查询的结果如下图所示:

php+MySQL实战案例【六】数据分页查询

     但我们不可能要求所有系统使用人员都可以写T-SQL直接操作数据表,因为便捷性和安全性都很差。人们更想通过界面操作,点几下鼠标就能对数据进行管理。

     我们需要先把数据从数据库中取出来,让用户清楚看的每条记录的内容,并对数据进行基本操作(增/删/改)。

数据查询时系统处理流程:

     MySql负责存储数据、PHP负责把数据从数据库取出来、html前端负责数据展示。

数据管理时系统处理流程:

     用户在html前端作出操作、PHP根据相应的操作去操作MySql数据表、将处理结果在前端反馈给用户。

     在我们处理完数据查询,把数据用指定的模板处理之后再展示的样子如下:

php+MySQL实战案例【六】数据分页查询

数据分页

     在我们数据量很少或者用户量很少的情况下,系统查询数据分页和不分页的差别不是很明显。但是在多用户、庞大的数据量下分页是必要的,可以有效降低服务的负载,提高用户端的数据响应速度。

1.降低服务器负载 

     假设我们有表A数据量为1万条,并发用户有100人。用户在登录系统时所有用户同时请求首页所用到的A表数据时就会造成并发请求。此时对服务器来说单次请求的数据量是1万*100也就是100万。并发的大量的请求势必会过度消耗服务器的资源。

     假设我们有分页处理,用户每次登录首页,我们只取第一页前10条数据。当用户进行翻页操作时再重新请求另外某页的10条记录。此时就算同样是100个人进行数据请求,每次对服务器的数据请求量只有100*10也就是1000。

经过简单的对比可以发现数据分页能够大幅度降低服务器负载。

2.提高用户端的数据响应

     在不进行数据分页时,PHP请求到A表中的所有记录之后,需要处理这些数据,给数据套html模板。此时数据遍历比较费,如果数据量且网络带宽不高时,用户在登录之后数据加载很慢严重影响用户使用体验。

     使用数据分页能够改善这个问题,每次请求都只请求少量数据,数据从请求到渲染显示的整个过程都很流畅。

 

案例关键代码分析

    用户管理列表进行数据分页操作,默认每页显示5条数据,初始加载第一页的数据。js分页数据请求如下:

//js分页数据请求方法

//page 表示第几页

//pagesize 表示每页显示几条记录

function PageInitForGetUser (page,pagesize) {

                $.ajax({

                        url: "action/GetAllUser.php", 

                        dataType: "json", 

                        async: true,

                        data:{

                            page:page,

                            pagesize:pagesize

                        },

                        type: "POST", //请求方式

                        success: function (req) {

                            HtmlStr="";

                            if (req.length>0) {

                                for (var i = 0; i <=req.length - 1; i++) {

                                    HtmlStr+='<tr><td>'+req[i].Id+'</td><td><u style="cursor:pointer" onclick="Show('+req[i].Id+')">'+req[i].username+'</u></td><td >'+req[i].password+'</td><td >'+req[i].sex+'</td><td >'+req[i].phone_number+'</td><td >'+req[i].email+'</td><td >'+req[i].address+'</td><td>   '+req[i].create_time+'</td><td class="td-manage"><a  href="javascript:;" onclick="Edit('+req[i].Id+')"class="ml-5" style="text-decoration:none"><i class="layui-icon">�</i></a><a  href="javascript:;" onclick="Delete('+req[i].Id+')" style="text-decoration:none"><i class="layui-icon">�</i></a></td> </tr>';

                                }

                                $("#UserTB").html(HtmlStr);

                            }

                        },

                        error: function () {

                            alert("数据接口请求错误!");

                        }

             

                    });

            }

  

php+MySQL实战案例【六】数据分页查询

PHP分页数据请求如下:

<?php

    header("Content-Type: text/html;charset=utf-8");

    include '../com/DBHelper.php';

    $DB=New DBHelper();

    $page=$_POST["page"];

    $pagesize=$_POST["pagesize"]; 

    $Resoult=$DB->PageQuerySQL("select * from sys_user where user_type='普通用户' order by Id desc",$page,$pagesize);

    echo $Resoult;

?>

  

php+MySQL实战案例【六】数据分页查询

前端分页控件初始化:

$(".zxf_pagediv").createPage({

                pageNum: Math.ceil(TOTAL/PAGESIZE),//总记录/每页显示数=总页数

                current: 1,//当前页数

                backfun: function(e) {

                    PageInitForGetUser(e.current,PAGESIZE);//回调函数,根据页数和页大小重新取数

                }

            });

  

php+MySQL实战案例【六】数据分页查询

 

后续

下期更新:php+MySQL实战案例【七】数据编辑、删除。