我有一个博客,多位作者可以发帖。在首页我想显示最近的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,我想选择整行。
答案 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;