Blogger Information
Blog 35
fans 0
comment 0
visits 25343
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
分页原理与案例--2019年6月11日22:30分
白守的博客
Original
720 people have browsed it

分页原理

基本术语

记录索引: 记录在表中的位置,从0开始(与主键无关)

偏移量: 每页显示的起始位置

显示数量: 每页默认的显示数量


2. SQL中的分页关键字

`LIMIT m OFFSET n`

`LIMIT m`: 每页显示的记录数量

`OFFSET n`: 从指定的索引n开始显示


3. 偏移量计算公式

offset = num * (page - 1)



总结

比如数据库用100条数据

每一次访问的时候只获取10条,我们就获取数据的时候设置只获取0-9的数据,第二页的时候获取10-19的数据.....

这时我们需要计算偏移量,公式就是这个   offset = num * (page - 1) 

简单点来说就是 

偏移量 = 当前显示数量 * (当前页码 - 1)


实例

<?php
// 获取当前要显示的页数
$page = intval($_GET['p']);

$pdo = new PDO('mysql:dbname=php', 'root', 'root');

// 每页显示数量
$num = 5;

// 总页数: 需要分二步, 第一求出总记录数量, 第二总记录数量除以每页显示的记录数量,再向上取整
$sql = "SELECT CEIL(COUNT(`mov_id`)/{$num}) FROM `movies`";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$pages = $stmt->fetchColumn(0);


// 每页的显示起止位置: 偏移量
// 偏移量 = 当前显示数量 * (当前页码 - 1)
$offset = $num * ($page - 1);

$sql = "SELECT `mov_id`,`name`, CONCAT(LEFT(`detail`,20),'...') FROM `movies` LIMIT {$num} OFFSET {$offset} ";
$stmt = $pdo->prepare($sql);

$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo json_encode([$pages, $result]);

运行实例 »

点击 "运行实例" 按钮查看在线实例


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>最新影视剧介绍</title>
    <style>
        /*设置表格样式*/

        table
        {
            /*折叠表格线与单元格之间的间隙*/
            border-collapse:collapse;
            width: 90%;
        }

        /*设置表格与单元格边框*/
        table,th, td
        {
            border: 1px solid black;
        }
        /*设置标题行背景色*/
        table thead tr:first-of-type {
            background-color: lightblue;
        }
        /*设置每一列的宽度*/
        table tbody tr td:nth-of-type(1) {
            width: 10%;
        }
        table tbody tr td:nth-of-type(2){
            width: 20%;
        }
        table tbody tr td:nth-of-type(3) {
            width: 70%;
        }

        /*设置分页条样式*/
        ul {
            text-align: center;
        }
        ul li {
            /*去掉默认样式*/
            list-style-type: none;
            /*转为水平显示*/
            display: inline-block;
            width: 30px;
            height: 20px;
            border: 1px solid black;
            /*垂直水平居中*/
            text-align: center;
            line-height: 20px;
            cursor: pointer;
            margin-left: 5px;
        }
        ul li:hover {
            background-color: lightblue;
            border: 1px solid red;
        }

        /*作业: 如何设置当前页码的高亮?*/
        .active {
            background-color: lightblue;
            border: 1px solid red;
        }
    </style>
</head>
<!-- isset($_GET['p'] ? $_GET['p'] : 1  -->
<body onload="getData(<?php echo $_GET['p'] ?? 1; ?>)">
<table>
    <caption>最新影视剧介绍</caption>
    <thead>
    <tr>
        <th>序号</th>
        <th>片名</th>
        <th>简介</th>
    </tr>
    </thead>
<!--        tr*5>td{x}*3-->
    <tbody>
    </tbody>
</table>

<!--分页条-->
<ul>

</ul>

<script>
    function getData(p) {
    // 创建 Ajax对象
    var request = new XMLHttpRequest();
    // 监听请求
    request.onreadystatechange = function () {
        // 请求成功
        if (request.readyState === 4) {
            var data  = JSON.parse(request.responseText);
            console.log(data);

            // 1. 动态显示分页条
            var ul = document.getElementsByTagName('ul').item(0);
            for (var i = 0; i < data[0]; i++) {
                var li = document.createElement('li');
                li.innerText = (i+1);

                // 设置当前页面高亮,p是Number,需要转String才可以比较
                li.className = (li.innerText === p.toString()) ? 'active' : null;

                // 动态显示数据
               li.onclick = function () {
                   var search = location.search.slice(0,3) + this.innerText;

                   location.replace(search);    //替换当前请求
               };
                // 将表格内容渲染到页面中...
                ul.appendChild(li);
            }



            // 2. 显示当前页内容
            var tbody = document.getElementsByTagName('tbody').item(0);
            console.log(data[1]);
            data[1].forEach(function (value){
                console.log(value);
                var tr = document.createElement('tr');
                for (var key in value) {
                    var td = document.createElement('td');
                    td.innerText = value[key];
                    tr.appendChild(td);
                }
                tbody.appendChild(tr);
            });

        }
    };

    // 配置请求
    request.open('GET', 'get_movies.php?p='+p.toString(), true);
    // 发送请求
    request.send(null);
    }
</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments