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