首页 > 解决方案 > 使用 PHP 在搜索结果中添加分页

问题描述

我正在努力将 php 分页添加到我的搜索结果中。目前,我在 index.php 上搜索一个术语,它需要我在 search.php 中找到与我的数据库匹配的结果列表。这部分工作正常,但我希望它每页显示 10 个结果,而不是同一页面上的每个结果。我如何实现这一目标?我在这里这里看了一下,但我的代码有点不同,我正在努力实施这些建议。任何帮助将不胜感激,即使只是指出我正确的方向。

    <?php
        if (isset($_POST['submit-search'])) {
            $search = mysqli_real_escape_string($conn, $_POST['search']);
            $sql = "SELECT * FROM people WHERE location LIKE '%$search%'";
            
            $result = mysqli_query ($conn, $sql);
            $queryResult = mysqli_num_rows($result);

            echo " ".$queryResult." RESULTS";

            if ($queryResult > 0){
                while ($row = mysqli_fetch_assoc($result)){
                    echo "<div>
            <h3>".$row['firstname']."</h3>
            <p>".$row['lastname']."</p>
            <p>".$row['location']."</p>
            <p>".$row['profession']."</p>
            </div>";
                }       
            }   
        }
    ?>

标签: php

解决方案


我将在这里解释逻辑,并为您提供实现分页的链接。

在您当前的代码中,您all the results从数据库中获取并在模板中显示它。

您实际上应该做的是利用MySQL's LIMIT clause,并批量获取结果。

LIMIT clause可以像下面这样使用:

SELECT * FROM people WHERE location LIKE '%$search%' LIMIT 5, 10

哪里5 is OFFSET and 10 is Row Count。也就是说,上面的查询只获取 5 到 15 的结果(假设行是连续的 id)。

更多信息:MYSQL 限制

现在,您可以认为OFFSETasCurrent page * Number of people listed on a pageRow Countas Number of people listed on a page (constant)。因此,对于第一页,您将使用以下查询:

SELECT * FROM people WHERE location LIKE '%$search%' LIMIT 0, 10
Where, 
Current page = 0 * 10;
number of people listed in a page = 10;

对于第二页:

SELECT * FROM people WHERE location LIKE '%$search%' LIMIT 10, 10
Current page = 1*10;
number of people listed in a page = 10;

等等...这里唯一改变的变量是page,您可以通过 URL 请求。

我会将链接添加到实现此逻辑的 github 存储库。请仔细阅读并了解其工作原理。

回购:PHP分页


推荐阅读