我正在构建一个基本论坛,我想获取已创建的线程列表,但也想从帖子表中获取最新帖子
,这样我就可以显示最后回复和时间最后回复的
我的尝试是如何导致重复结果的,我尝试了 LEFT JOIN
和 INNER JOIN
结果相同。我希望有人知道解决方案。
这是我的尝试:
SELECT t1.username as thread_starter,
t2.username as last_reply_username,
t1.thread_time as thread_start,
t2.post_time as last_reply_time,
t1.title,
t1.sticky
FROM threads t1
INNER JOIN posts t2
ON t1.id = t2.threadid
ORDER BY t1.sticky DESC, t2.post_time DESC
有谁知道我该如何解决这个问题,这样它就只会从与每个线程相关的帖子表中获取最后和最新的帖子,而不会返回重复的线程?
最佳答案
下面查询背后的想法是,它从 post
表中为子查询。然后它连接回原始表 post
和 threads
表。
SELECT a.username AS Thread_Starter,
c.username AS Last_reply_username,
a.thread_time AS Thread_Start,
c.post_time AS Last_Reply_Time,
a.Title,
a.Sticky
FROM threads a
INNER JOIN
(
SELECT threadID, MAX(Post_Time) lastPost
FROM post
GROUP BY ThreadID
) b ON a.threadID = b.threadID
INNER JOIN post c
ON b.threadID = c.ThreadID AND
b.lastPost = c.post_time
ORDER BY a.sticky DESC, c.post_time DESC
关于mysql - 从另一个表中选择最近的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906002/