MySQL:在论坛线程列表中选择最新的海报

MySQL:在论坛线程列表中选择最新的海报,mysql,Mysql,我试过Stack上的许多类似问题,但我发现所有这些问题都让我不断得到错误用户的用户名,我真的被卡住了,花了一整天的时间试图解决这个问题 我有一个论坛,在论坛内有一个线程列表,然后在线程内人们可以发布,当用户查看论坛并看到线程列表时,我希望他们显示最新的帖子和用户名 这是我当前的SQL查询: SELECT t.thread_id, t.featured, t.title, t.post_count, t.view_count, t.closed, p.post_id AS latest_reply

我试过Stack上的许多类似问题,但我发现所有这些问题都让我不断得到错误用户的用户名,我真的被卡住了,花了一整天的时间试图解决这个问题

我有一个论坛,在论坛内有一个线程列表,然后在线程内人们可以发布,当用户查看论坛并看到线程列表时,我希望他们显示最新的帖子和用户名

这是我当前的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\u名称似乎是随机选择的,因此随机选择了最新的回复用户名。u2.user\u name应该是最近一篇文章的用户名。

您的子查询应该是:

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

因此,您可以在每个线程中获得最高的帖子ID。

如果您可以使用一些示例数据创建一个SQLFIDLE,这将更容易提供帮助。顺便说一句,这是MySQL标记下最常见的问题。您不需要
p2
,它与
p
相同。
forum\u post.ID
真的是用户的ID吗,不是帖子的ID吗?@Barmar是的,没错,是用户的ID,不是帖子