php - 按类别对查询结果进行分页
问题描述
我正在尝试创建一个查询以获取特定论坛类别的 25 个论坛主题(每页),然后尝试按 ID 降序排列它们以首先显示最新帖子,但我似乎无法让它工作。 ..
这是 PHP 和 SQL
$category = $_GET['category'];
$show_thr_max = $_GET['thr'];
$show_thr_min = $show_thr_max - 24;
$threadsq = "SELECT * FROM `forum_post` WHERE `post_cate_id` = '$category' AND `id` BETWEEN '$show_thr_min' AND '$show_thr_max'";
$threadsr = mysqli_query($con, $threadsq);
$category
是要从中获取相关线程的类别的 ID,
$show_thr_ max
设置为 25,每页通过时递增 25,这是要抓取的最大线程范围。
$shrow_thr_min
设置要抓取的线程的最小范围(小于 _max 24)。
该查询正在抓取范围之间的线程,它们来自正确的类别,尽管它抓取的是它可以找到的前 25 个,而不是具有最高 id 的 25 个。
所以第一页会显示 ids 25 到 1,而不是 91 到 66,这是想要的结果
我知道 SQL for 子句中有一个优先表,这可能是原因吗?在满足所有条件之前订购?
十分感谢你的帮助 :)
解决方案
LIMIT/OFFSET
您可能只需在此处使用查询即可逃脱:
SELECT *
FROM forum_post
ORDER BY id DESC
LIMIT 25
OFFSET 25; -- replace 25 with whatever page you want
有些人对使用限制/偏移进行分页持批评态度,因为有时新数据可能会进入前一页,从而摆脱分页逻辑。但是,就您而言,过去发布的帖子无法添加或更改(很可能)。因此,在这种情况下,限制/偏移应该是一个可行的选择。
如果你真的想处理自己的分页,那么使用id
可能会有问题,因为不能保证它是完全顺序的(除非你自己严格控制它)。
推荐阅读
- javascript - 是否可以更改最初相同范围的变量范围?
- pandas - 在不丢失索引名称的情况下将具有索引值的行追加/插入到索引数据框中?
- firebase - Flutter 从 google firebase 加载图像非常慢
- r - 仅返回列中的最后一个值(国家)
- regex - 使用正则表达式在点后添加空格,不包括数字和链接字符串之间的点
- c# - 将非常大的整数压缩成尽可能小的字符串
- typescript - 如何将外部 JS 库导入命名空间打字稿
- r - 按 purrr 中的条件合并列表中的数据框
- python - 寻找更简单的方法来划分 2 个数字 A 和 B,其中最大的总是分子
- javascript - 使用javascript删除容器中的所有类