我有一張表,其中包含許多不同作者的博客文章。我想要做的是顯示最近10位作者中的每一位最近發表的文章。MySQL - 最近10位作者中的每一位選擇最近一篇文章
每位作者的帖子都按順序添加到表格中,這意味着可以由單個作者運行帖子。我有一段時間想出一個單一的查詢來做到這一點。
這給了我最近10個獨特的作者ID;可以將它用作每個作者最近發佈的子選擇嗎?
SELECT DISTINCT userid
FROM posts
ORDER BY postid DESC
LIMIT 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