2012-10-16 46 views
1

我建立一个基本的论坛,我想抓住创建的线程的列表中,但也抓住从职位表中的most recent post,所以我可以显示last reply and time of last reply从另一个表

如何过选择最近我行尝试导致重复的结果,我尝试了一个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 

任何一个人知道我可以解决这个问题,所以它只会得到有关每个线程后表中最后一个和最近的职位,而无需返回重复的主题?

回答

2

下面的查询背后的想法是,它发现从post表中的每个threadid子查询中最近的职位(post_time)。然后它回到原表postthreads表上。

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 
+0

非常感谢! – Sir

+0

欢迎戴夫! –