按类别对查询的分页结果

时间:2018-09-11 08:07:16

标签: php sql mysqli

我正在尝试创建一个查询,以获取特定论坛类别的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个线程。

因此第一页将显示ID从25到1,而不是91到66,这是理想的结果

我知道SQL中有一个用于子句的优先级表,这可能是原因吗?在满足所有条件之前订购吗?

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

您可以仅在此处使用LIMIT/OFFSET查询就可以摆脱困境:

SELECT *
FROM forum_post
ORDER BY id DESC
LIMIT 25
OFFSET 25;     -- replace 25 with whatever page you want

使用分页的限制/偏移量有些关键,因为有时新数据可能进入上一页,从而放弃分页逻辑。但是,就您而言,过去的帖子无法添加(或更改)。因此,在这种情况下,限制/偏移量应该是一个可行的选择。

如果您确实确实想处理自己的分页,那么使用id可能会出现问题,因为无法保证它会完全按顺序进行(除非您自己严格控制)。