MySQL加入表的最大行内容

时间:2015-03-23 17:37:51

标签: mysql sql

对于一个简单的论坛,我想从最近的帖子中按顺序列出主题。我已经完成了以下查询没有问题:

SELECT t.thread_id, t.title, MAX(m.post_id) as latest_reply
FROM forum_thread as t
    LEFT JOIN forum_post as n ON(latest_reply = m.thread_id)

WHERE t.forum_id=:forum_id AND t.sticky=0
GROUP BY t.thread_id
ORDER BY latest_reply DESC
LIMIT :limit_bottom, :limit_top

这很好,直到我想要从最大帖子行获得更多细节。如果我从帖子表中选择更多信息,结果是随机的

我想知道帖子标题,然后是发布的用户名。

线程表[forum_thread]如下所示:

thread_id | forum_id | title | sticky | post_count | view_count | closed

帖子表[forum_post]如下所示:

post_id | user_id | thread_id | timestamp | title | post_body_cache

用户表[user]如下所示:

id | username

我需要加入最大的帖子行来获取标题,然后加入用户表来获取用户名。这样做最有效的方法是什么?我尝试的所有东西都返回了一个致命的错误。

期望的结果将是:

[forum_thread] thread_id | [forum_thread] title | [forum_post] MAX post_id | [forum_post] title | [user] username

1 个答案:

答案 0 :(得分:1)

要从外部表中获取整行,您必须将Max移动到子查询并在加入条件中使用它:

SELECT  t.thread_id, t.title, p.author, p.post_date, p.whatever
FROM    forum_thread as t
LEFT JOIN forum_post as p
    ON  p.thread_id = m.thread_id
    and p.post_date =(
        select  Max( p.post_date )
        from    forum_post
        where   thread_id = p.thread_id )    
WHERE   t.forum_id = :forum_id
    AND t.sticky= 0