MySql - 从表中获取最新的行,没有重复的主题ID

时间:2014-03-31 02:23:21

标签: php mysql

我试图通过用户,主题和最后一篇文章中的变量获取已在论坛中发布的最新主题。问题是我正在尝试的当前方法带回重复的线程,因为较新的帖子已经发布在这些线程中,而我只想要一个帖子返回每个线程,而不是所有最新的帖子。

SELECT t.thread_id, u.user_name, p.post_entry
FROM forum_thread as t
LEFT JOIN forum_post AS p ON p.post_thread = t.thread_id
LEFT JOIN user AS u ON u.user_id = p.post_user
ORDER BY t.thread_lastpost DESC LIMIT 0,8

目前正在返回:

/-----------------------------------------/
| 7049 | USERNAME | Post Entry |
|----------------------------------------|
| 7049 | USERNAME | Post Entry | 
|----------------------------------------|
| 7049 | USERNAME | Post Entry | 
|----------------------------------------|
| 7049 | USERNAME | Post Entry | 
|----------------------------------------|
| 7650 | USERNAME | Post Entry | 
|----------------------------------------|
| 7068 | USERNAME | Post Entry | 
|----------------------------------------|
| 7056 | USERNAME | Post Entry | 
|----------------------------------------|
| 7136 | USERNAME | Post Entry | 

我想删除那些第一个重复的ID,只留下一个带有该帖子的最新帖子条目。

我希望我能够很好地解释它,让人们理解。

感谢。

-----------------编辑--------------------

使用GROUP BY:

SELECT t.thread_id, u.user_id, p.post_entry
FROM forum_post AS p
LEFT JOIN forum_thread AS t ON t.thread_id = p.post_thread
LEFT JOIN user AS u ON u.user_id = p.post_user
GROUP BY t.thread_id
ORDER BY t.thread_lastpost DESC LIMIT 0,8

1 个答案:

答案 0 :(得分:0)

此查询可能效果不佳,但在不了解数据库结构的情况下,我无法做更多事情。您还需要一些post_id或post_timestamp来包含第二个左连接。 DISTINCT和GROUP BY都不会解决您的问题,因为用户名和post_entry在所有情况下通常都会有所不同,即这些行实际上是不同的。

SELECT t.thread_id, u.user_name, p.post_entry
FROM forum_thread as t
LEFT JOIN forum_post AS p ON p.post_thread = t.thread_id
LEFT JOIN forum_post AS p2 ON p.post_id > p2.post_id
LEFT JOIN user AS u ON u.user_id = p.post_user
where p2.post_id is null
ORDER BY t.thread_lastpost DESC LIMIT 0,8