我正在尝试创建一个查询,以获取特定论坛类别的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中有一个用于子句的优先级表,这可能是原因吗?在满足所有条件之前订购吗?
非常感谢您的帮助:)
答案 0 :(得分:1)
您可以仅在此处使用LIMIT/OFFSET
查询就可以摆脱困境:
SELECT *
FROM forum_post
ORDER BY id DESC
LIMIT 25
OFFSET 25; -- replace 25 with whatever page you want
使用分页的限制/偏移量有些关键,因为有时新数据可能进入上一页,从而放弃分页逻辑。但是,就您而言,过去的帖子无法添加(或更改)。因此,在这种情况下,限制/偏移量应该是一个可行的选择。
如果您确实确实想处理自己的分页,那么使用id
可能会出现问题,因为无法保证它会完全按顺序进行(除非您自己严格控制)。