对于一个简单的论坛,我想从最近的帖子中按顺序列出主题。我已经完成了以下查询没有问题:
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
答案 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