我正在尝试建立一个论坛排名系统,该系统可以根据之前的记录一次获得一条记录。
示例表是:
| POST_ID | POST_REPLIES | -------------------------- | 1 | 5 | | 2 | 2 | | 3 | 8 | | 4 | 8 | | 5 | 12 | --------------------------
如果我执行简单查询ORDER BY POST_REPLIES DESC
,我会获得POST_ID 5, 4, 3, 1, 2
。
但我想要做的只是获取下一行(一次只有一行),并根据当前的帖子。
例如:如果我目前正在查看帖子#3,那么会有一个标有“大多数回复的下一篇文章”的按钮,指向帖子#4。
我目前在处理重复项时遇到问题,因为我遇到了3到4之间的循环(3点到4点,4点到3点而不是5点)
我曾经玩过将表连接到自身并比较行以查看哪个更大或更小,但由于我使用的是1的限制,因此该行始终为1,因此无用。所以我的基本查询是:
SELECT * FROM posts
WHERE post_id != '$currentPost'
ORDER BY POST_REPLIES DESC, POST_ID DESC LIMIT 1
我该怎么做?
答案 0 :(得分:1)
您需要的第一步是“排名”结果。我在MySQL中发现这样做的最好方法是使用如下变量:
SELECT posts.post_id, posts.post_replies, @rank := @rank + 1 AS rank
FROM posts, (SELECT @rank := 0) r
然后你可能不得不将该查询嵌套在另一个查询中以实现您的需要。如果这指向正确的方向,请告诉我
答案 1 :(得分:1)
SELECT p.*
FROM (
SELECT POST_ID, POST_REPLIES
FROM posts
WHERE POST_ID = @currentId) as cur
JOIN posts p
ON p.POST_REPLIES >= cur.POST_REPLIES
AND p.POST_ID > cur.POST_ID
ORDER BY p.POST_REPLIES DESC, p.POST_ID
LIMIT 1 ;
答案 2 :(得分:0)
限制使用范围,例如
limit 0,1
其中0是起始记录,1是要获取的记录数。
limit 5,1
会得到第六条记录,依此类推。您可以通过post,get或session跟踪页码,并使用它以这种方式操作查询。
获取和存储所有记录,然后每页显示它们也很常见,但是如果您希望生成大量记录,则可能会出现问题。