MySQL-由10位最新作者中的每一位选择最新的帖子
我有一个包含许多不同作者的博客文章的表格。我想做的是展示10位最新作者的最新文章 每个作者的帖子只是按顺序添加到表中,这意味着可能会有一个作者的帖子运行。我花了很长时间提出一个查询来完成这项工作 这给了我最后10个唯一的作者ID;它是否可以作为每个作者获取最新文章的子选项MySQL-由10位最新作者中的每一位选择最新的帖子,mysql,Mysql,我有一个包含许多不同作者的博客文章的表格。我想做的是展示10位最新作者的最新文章 每个作者的帖子只是按顺序添加到表中,这意味着可能会有一个作者的帖子运行。我花了很长时间提出一个查询来完成这项工作 这给了我最后10个唯一的作者ID;它是否可以作为每个作者获取最新文章的子选项 SELECT DISTINCT userid FROM posts ORDER BY postid DESC LIMIT 10 您需要通过postid DESC对子查询每个作者的最后一个postid和订单。然后,将该结果连
SELECT DISTINCT userid
FROM posts
ORDER BY postid DESC
LIMIT 10
您需要通过postid DESC对子查询每个作者的最后一个postid和订单。然后,将该结果连接到
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无论如何都是唯一标识符,并且只存在于一位作者的文章中。@DRapp需要复合索引来加速子查询AA(完全索引扫描vs完全表扫描)。这很接近-它返回每个用户ID的最新postID,但行中的其余数据不匹配。例如,这不起作用:按用户id顺序按id描述从posts组中选择userid、title、bodytext、MAX(id)id LIMIT 10right如果需要所有字段,很遗憾,您需要一个子查询。我编辑了我的答案。太好了,很高兴我帮了忙。接受正确答案会更大:)
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
SELECT userid
, MAX(postid) AS lastpostid
FROM posts
GROUP BY userid
ORDER BY lastpostid DESC
LIMIT 10