2015-06-14 44 views
0

我已經嘗試了很多類似的Stack可用的問題,但是我發現所有這些問題都不斷得到錯誤用戶的user_name,我真的被卡住了花了整整一天的時間試圖弄清楚這一點。MySQL:在論壇主題列表中選擇最近的海報

我有一個論壇,論壇內是一個線程列表,然後在線程內人們可以發帖,當用戶查看論壇,並看到線程列表時,我希望他們最近的帖子和用戶名顯示

這是我當前的SQL查詢:

SELECT t.thread_id, t.featured, t.title, t.post_count, t.view_count, t.closed, p.post_id AS latest_reply, if(u2.user_name IS NOT NULL, u2.user_name, u.user_name) AS latest_reply_user_name, MAX(p.timestamp) as timestamp, u.user_name 
FROM forum_thread AS t 
    LEFT JOIN forum_post AS p ON(t.thread_id = p.thread_id 
     AND p.post_id=(SELECT MAX(p.post_id) FROM forum_post WHERE thread_id=p.thread_id)) 
    LEFT JOIN forum_post as p2 ON (p2.post_id = p.post_id) 
    LEFT JOIN user as u ON(t.id = u.id) 
    LEFT JOIN user as u2 ON (p2.id = u2.id) 
WHERE t.forum_id = :forum_id AND t.sticky=:sticky AND t.removed=0 
GROUP BY t.thread_id 
ORDER BY latest_reply DESC 
LIMIT :limit_bottom, :limit_top 

的問題是u2.user_name似乎是隨機選擇的,因此latest_reply_user_name是隨機選擇的。 u2.user_name應該是最近發佈的用戶名。

+0

如果你可以用一些示例數據創建一個SQLfiddle,它會更容易幫助。 –

+0

順便提一句,這是*在MySQL標籤下SO上最常見的問題。 – Strawberry

+0

你不需要'p2',它和'p'一樣。 – Barmar

回答

0

你的子查詢應該是:

(SELECT MAX(p.post_id) FROM forum_post WHERE thread_id=t.thread_id) 

讓你在每個線程得到最高的職位ID。