MySQL:在论坛帖子列表中选择最新的海报

时间:2015-06-14 20:10:38

标签: mysql

我在Stack上尝试了很多类似的问题,但我发现所有这些问题我不断得到错误用户的user_name,我真的被困住了,并且花了一整天时间试图解决这个问题。

我有一个论坛,在论坛中是一个线程列表,然后在人们可以发布的帖子中,当用户查看论坛,并看到线程列表,我想要他们最近的帖子和用户& #39;要显示的名称

这是我当前的SQL查询:

SELECT t.thread_id, t.featured, t.title, t.post_count, t.view_count, t.closed, p.post_id AS latest_reply, if(u2.user_name IS NOT NULL, u2.user_name, u.user_name) AS latest_reply_user_name, MAX(p.timestamp) as timestamp, u.user_name
FROM forum_thread AS t
    LEFT JOIN forum_post AS p ON(t.thread_id = p.thread_id
        AND p.post_id=(SELECT MAX(p.post_id) FROM forum_post WHERE thread_id=p.thread_id))
    LEFT JOIN forum_post as p2 ON (p2.post_id = p.post_id)
    LEFT JOIN user as u ON(t.id = u.id)
    LEFT JOIN user as u2 ON (p2.id = u2.id)
WHERE t.forum_id = :forum_id AND t.sticky=:sticky AND t.removed=0
GROUP BY t.thread_id
ORDER BY latest_reply DESC 
LIMIT :limit_bottom, :limit_top

问题是u2.user_name似乎是随机选择的,因此随机选择了latest_reply_user_name。 u2.user_name应该是最新帖子的user_name。

1 个答案:

答案 0 :(得分:0)

你的子查询应该是:

(SELECT MAX(p.post_id) FROM forum_post WHERE thread_id=t.thread_id)

所以你在每个帖子中获得最高的帖子ID。