2010-10-24 44 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

相关问题