MySQL - 最近10位作者中的每一位选择最近一篇文章
我有一张表,其中包含许多不同作者的博客文章。我想要做的是显示最近10位作者中的每一位最近发表的文章。MySQL - 最近10位作者中的每一位选择最近一篇文章
每位作者的帖子都按顺序添加到表格中,这意味着可以由单个作者运行帖子。我有一段时间想出一个单一的查询来做到这一点。
这给了我最近10个独特的作者ID;可以将它用作每个作者最近发布的子选择吗?
SELECT DISTINCT userid
FROM posts
ORDER BY postid DESC
LIMIT 10
select userid,postid, win from posts where postid in (
SELECT max(postid) as postid
FROM posts
GROUP BY userid
)
ORDER BY postid desc
limit 10
您需要每个作者的最后一个postid的子查询和postid DESC的顺序。然后,该结果加入到posts
表:
SELECT B.* FROM
(
SELECT * FROM
(
SELECT userid,MAX(postid) postid
FROM posts GROUP BY userid
) AA
ORDER BY postid DESC
LIMIT 10
) A INNER JOIN posts B
USING (user_id,post_id);
请确保您有此指数
ALTER TABLE posts ADD INDEX user_post_ndx (userid,postid);
你不应该需要对用户ID的复合索引,作为postID的postID无论如何都是唯一标识符,并且仅存在于正在发布帖子的一个作者。 – DRapp 2012-04-16 21:35:38
@DRapp需要使用该复合索引来加速子查询AA(完整索引扫描vs全表扫描) – RolandoMySQLDBA 2012-04-16 22:13:14
SELECT userid
, MAX(postid) AS lastpostid
FROM posts
GROUP BY userid
ORDER BY lastpostid DESC
LIMIT 10
这很接近 - 它会为每个用户标识返回最近的postid,但行中的其余数据不会比赛。例如,这是行不通的:SELECT userid,title,bodytext,MAX(id)id FROM帖子GROUP BY userid ORDER BY id DESC LIMIT 10 – 2012-04-16 21:36:09
right如果你想要所有的字段,不幸的是你需要一个子查询。我编辑了我的答案。 – 2012-04-16 21:43:26
非常好,谢谢。这是完美的。 – 2012-04-16 21:49:06