zoukankan      html  css  js  c++  java
  • php+MySQL实战案例【六】数据分页查询

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

    数据查询

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

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

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

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

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

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

         用户在html前端作出操作、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分页数据请求如下:

    <?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;
    
    ?>
    

      

    前端分页控件初始化:

    $(".zxf_pagediv").createPage({
    
                    pageNum: Math.ceil(TOTAL/PAGESIZE),//总记录/每页显示数=总页数
    
                    current: 1,//当前页数
    
                    backfun: function(e) {
    
                        PageInitForGetUser(e.current,PAGESIZE);//回调函数,根据页数和页大小重新取数
    
                    }
    
                });
    

      

     

    后续

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

  • 相关阅读:
    02-链路层
    01-TCP/IP概述
    ARM Cortex-A9 (tiny 4412)
    STM32 f407 温湿度采集报警
    arduino mega 避障报距小车
    归纳法调试
    python 数据类型Ⅲ(字典)
    Python 数据类型Ⅱ(列表,元祖)
    Python 数据类型(str,int,bool)
    Python while循环&格式化输出&运算符
  • 原文地址:https://www.cnblogs.com/soulsjie/p/12666067.html
Copyright © 2011-2022 走看看