2010-10-24 82 views
1

我有一個小問題 - 我會得到這個查詢主題帖子數和最後一個帖子ID,但我想不出,如何得到正確的用戶ID。我得到第一個帖子(最低ID)的用戶ID,但我想最新的帖子...我已經嘗試添加「ORDER BY ID DESC」,但這不會幫助。任何想法如何做到這一點?獲取最後一篇文章的用戶ID(MySQL)

SELECT 
    COUNT(`id`) AS `count`, 
    MAX(`id`) AS `last_post_id`, 
    `topic_id`, 
    `user_id` 
FROM `forum_posts` 
WHERE `topic_id` IN (326, 207, 251) 
GROUP BY `topic_id` 
+0

你爲什麼用IN子句限制topic_id? – Dave 2010-10-24 19:53:29

+0

因爲我只想知道這些主題信息。你有更好的想法排序想要的主題嗎? – Kaspar 2010-10-24 20:11:38

+0

我認爲你使用IN的方法很好。我不明白戴夫爲什麼評論它。 – 2010-10-24 20:40:31

回答

0

在查詢userid返回任何用戶標識符,組,通常會出現在任何索引優化碰巧挑的第一個中的用戶ID,但它並沒有要。

自連接從具有您所感興趣的ID行取USER_ID:

SELECT T1.`count`, T1.last_post_id, T1.topic_id, T2.user_id 
FROM (
    SELECT 
     COUNT(id) AS `count`, 
     MAX(id) AS last_post_id, 
     topic_id, 
    FROM forum_posts 
    WHERE topic_id IN (326, 207, 251) 
    GROUP BY topic_id 
) T1 
JOIN forum_posts T2 
ON T1.last_post_id = T2.id 
1

你應該在你存儲在數據庫中創建的職位時的時間戳使用ORDER BY。這將確保您按時間排序帖子,而不是按ID排序,因爲如果刪除/添加帖子,ID可能會混亂。

+0

不阻止某人回溯列值 - 你需要一個CHECK約束(這意味着在MySQL上觸發)來強制執行。 – 2010-10-24 20:01:10

+0

雖然這是很好的信息,它應該是一個評論,而不是一個答案。它不能解決OP的問題。 – 2010-10-24 20:04:44

+0

@Mark:OP希望按時間對帖子進行排序,這種信息是一種比OP所追求的方式更有優勢的方式。這就是爲什麼我相信這是他/她的問題的答案,而不僅僅是額外的信息。 – Chetan 2010-10-24 20:13:29

相關問題