php后端实现分页查询

在搭建自己的博客系统的时候遇到了博客分页问题,刚开始是采用比较笨的方法直接将数据全部取出来存入数组中,后来决定优化一下,利用mysql中的limit实现分页取博客。

mysql的limit用法:

mysql> SELECT * FROM orange LIMIT 5;

  如果limit后只有一个参数,则该参数表示从第一条开始取多少条数据,上面代码就表示从数据库第一条开始取5条数据。

当有两个参数时:

SELECT * FROM orange  LIMIT 3,2;

  上述代码表示从第3+1条数据,即第四条数据开始,取两条数据,即取第4、5条数据。

前端部分我使了jquery,十分方便,后端的话使用了php来从数据库取数据。主要思路就是从前端页面通过jquery的ajax向后端请求数据,并向后端传递当前页数pageNum。后端接收到pageNum后,通过以下核心语句,来实现根据pageNum取数据库不同部分的数据,实现分页查找。(这里假设每页两篇博客)

(pageNum-1)*2的含义是,第pageNum页的内容应该时从(pageNum-1)*2 + 1条数据开始查找,即跳过前面的(pageNum - 1)*2条数据。

$pageNum = ( $pageNum - 1 )*2;
$sql = 'select * from blogs limit ' . $pageNum. ',2';

  下面是我本地测试的代码:

前端get.html:(有点长,需要判断最后一页,第一页的情况)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <title>mysql分页查询</title>
</head>

<body>
    <div class="app">
        <button onclick="forward()">前一页</button>
        <button onclick="next()">后一页</button>
        <div id="result">
        </div>
    </div>
    <script>
        var pageNum = 1;

        $(document).ready(function () {
            query();
        })

        function forward() {
            pageNum--;
            query();
        }

        function next() {
            pageNum++;
            query();
        }

        function query() {
            if (pageNum <= 0) {
                alert('这是第一页!');
                pageNum = 1;
                return;
            }
            console.log(pageNum);
            $("#result").empty();
            $.get("../get.php", {
                    "pageNum": pageNum
                },
                function (data, status) {
                    console.log("Data: " + data + "\nStatus: " + status);
                    if (data === "NULL") {
                        pageNum--;
                        query();
                        alert('没有更多数据了!');
                        return;
                    }
                    data = $.parseJSON(data);
                    for (let i in data) {
                        var s = "<h1>Title: " + data[i].title + "</h1>" + data[i].content;
                        $("#result").append(s);
                    }
                });
        }
    </script>
</body>

</html>

  后端代码get.php:

<?php
$pageNum = $_GET['pageNum'];
// $conn = new mysqli( $servername, $username, $password, $dbname );
$conn = new mysqli( 'localhost', 'root', 'zy20011109', 'blogs' );
if ( $conn->connect_error ) {
    die( '连接失败: ' . $conn->connect_error );
}
$pageNum = ( $pageNum - 1 )*2;
$sql = 'select * from blogs limit ' . $pageNum. ',2';
$result = $conn->query( $sql );
if ( $result->num_rows>0 ) {
    $blogs = array();
    while( $row = $result->fetch_assoc() ) {
        array_push( $blogs, $row );
    }
    echo json_encode( $blogs, JSON_UNESCAPED_UNICODE );
} else {
    echo 'NULL';
}
$conn->close();
?>

  还有就是php返回数据格式的问题,我发现php返回的数据是string类型的数据,所以在get.html中使用时需要转换为json类型,就得到了一个json数组,通过遍历此数组,就可以得到相应的数据了。

上一篇:SpringBoot项目学习-博客系统-part3


下一篇:CLickhouse MemoryTracker模块详解