最新的X帖子由独特的作者

时间:2013-04-05 19:41:23

标签: mysql sql

我有一个博客,多位作者可以发帖。在首页我想显示最近的X帖子的旋转木马 - 让我们说5.但是,我想过滤掉作者重复。因此,如果一个作者在这5个帖子中有多个帖子,那么只有最近的一个会进入,而其他人会被过滤掉。另外,我想选择整行,而不仅仅是ID。这是一个例子:

数据

ID | Title   | AuthorID | Date
1  | "Now"   | 6        | 2013-03-27
2  | "this"  | 5        | 2013-03-26
3  | "is"    | 4        | 2013-03-27
4  | "the"   | 2        | 2013-03-28
5  | "story" | 2        | 2013-03-29
6  | "all"   | 4        | 2013-04-01
7  | "about" | 2        | 2013-04-02
8  | "how"   | 3        | 2013-04-03
9  | "My"    | 1        | 2013-04-04
10 | "life"  | 1        | 2013-04-05

期望的结果

ID | Title   | AuthorID | Date
10 | "life"  | 1        | 2013-04-05
8  | "how"   | 3        | 2013-04-03
7  | "about" | 2        | 2013-04-02
6  | "all"   | 4        | 2013-04-01
2  | "this"  | 5        | 2013-03-26

我目前使用以下内容:

SELECT * FROM posts
ORDER BY date DESC
LIMIT 5

但当然这会让我得到以下结果

ID | Title   | AuthorID | Date
10 | "life"  | 1        | 2013-04-05
9  | "My"    | 1        | 2013-04-04
8  | "how"   | 3        | 2013-04-03
7  | "about" | 2        | 2013-04-02
6  | "all"   | 4        | 2013-04-01

我希望消除重复。怎么样?

我看到有一个DISTINCT子句,但这只会选择作者ID,我想选择整行。

2 个答案:

答案 0 :(得分:1)

这个技巧/黑客会起作用,但可能需要一些时间来生成结果(在一个包含1,00,000行的表上花了我3.713秒):

SELECT *
FROM (SELECT * 
    FROM posts
    ORDER BY date DESC ) d
GROUP BY d.`AuthorID`
LIMIT 5;

答案 1 :(得分:0)

我认为这就是你要找的东西:

SELECT *
FROM (SELECT *
      FROM posts
      ORDER BY Date DESC) p
GROUP BY p.AuthorID
ORDER BY Date DESC
LIMIT 5;

SQL Fiddle