php - 使用 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>";
}
}
}
?>
解决方案
我将在这里解释逻辑,并为您提供实现分页的链接。
在您当前的代码中,您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 限制
现在,您可以认为OFFSET
asCurrent page * Number of people listed on a page
和Row Count
as 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分页
推荐阅读
- node.js - NodeJs中发生事件后如何重定向页面
- node.js - 默认值的猫鼬调用函数
- javascript - 在 :hover in contenteditable 上显示图标
- arduino - 使用开关选择带有按钮的案例 - 切换
- language-agnostic - 给定两个位置和所有位置的列表,找到最快的路径
- javascript - 有没有办法改变谷歌图表中 vaxis 基线的宽度/厚度?
- reactjs - 如何在 Reactjs 中显示评论或子记录
- openlayers - 使用 Parcel 连接向量
- python - Kivy 弹出式文本换行无法按预期工作
- python - 重复序列中的值直到 n