2012-04-16 88 views
8

我有一張表,其中包含許多不同作者的博客文章。我想要做的是顯示最近10位作者中的每一位最近發表的文章。MySQL - 最近10位作者中的每一位選擇最近一篇文章

每位作者的帖子都按順序添加到表格中,這意味着可以由單個作者運行帖子。我有一段時間想出一個單一的查詢來做到這一點。

這給了我最近10個獨特的作者ID;可以將它用作每個作者最近發佈的子選擇嗎?

SELECT DISTINCT userid 
FROM posts 
ORDER BY postid DESC 
LIMIT 10 

回答

3
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 

http://sqlfiddle.com/#!2/09e25/1

+0

這很接近 - 它會爲每個用戶標識返回最近的postid,但行中的其餘數據不會比賽。例如,這是行不通的:SELECT userid,title,bodytext,MAX(id)id FROM帖子GROUP BY userid ORDER BY id DESC LIMIT 10 – 2012-04-16 21:36:09

+0

right如果你想要所有的字段,不幸的是你需要一個子查詢。我編輯了我的答案。 – 2012-04-16 21:43:26

+0

非常好,謝謝。這是完美的。 – 2012-04-16 21:49:06

1

您需要每個作者的最後一個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); 
+0

你不應該需要對用戶ID的複合索引,作爲postID的postID無論如何都是唯一標識符,並且僅存在於正在發佈帖子的一個作者。 – DRapp 2012-04-16 21:35:38

+0

@DRapp需要使用該複合索引來加速子查詢AA(完整索引掃描vs全表掃描) – RolandoMySQLDBA 2012-04-16 22:13:14

1
SELECT userid 
    , MAX(postid) AS lastpostid 
FROM posts 
GROUP BY userid 
ORDER BY lastpostid DESC 
LIMIT 10