请原谅我这个问题的标题是不清楚的,因为我正在努力寻找我正在寻找的名字。因此,请在我解释时请耐心等待:
假设我有以下表格:
现在假设feeds
表中有5个条目:
the great splog
每天发布100篇帖子
unknown blog 1
到unknown blog 4
每天发布1或2个帖子
我们将定期提取这些Feed并将其帖子保存在posts
表格中。
但是,如果我select
来自posts
表的最后10个条目,那么所有10个帖子都很有可能属于the great splog
,仅仅是因为它今天发布了更多帖子比其他4个不知名的人。
但我不希望来自同一Feed的10个帖子,我希望select
查询能够理解这种情况并选择 - 例如 - 只有2个条目由the great splog
和8编写由posts
表格中的其他未知博客撰写的条目。
如何实施此类查询?
答案 0 :(得分:1)
采取3种不同的,另外7种:
(SELECT * FROM posts WHERE post_id IN (SELECT MAX(post_id) FROM posts GROUP BY post_feed_id) ORDER BY post_id DESC LIMIT 3)
UNION
(SELECT * FROM posts ORDER BY post_id DESC LIMIT 7)
ORDER BY post_id DESC
<强>更新强> 上面的代码只给出9,所以做一些更多的封装来限制正确的地方。
SELECT * FROM
(
SELECT * FROM
(
(
SELECT * FROM posts WHERE post_id IN (
SELECT MAX(post_id) FROM posts GROUP BY post_feed_id
) ORDER BY post_id DESC LIMIT 3
)
UNION
(
SELECT * FROM posts ORDER BY post_id DESC
)
) AS temp LIMIT 10
) AS temp2 ORDER BY post_id DESC;
答案 1 :(得分:1)
您可以使用以下声明从每个Feed中获取最后一篇文章:
select p.*
from posts p join
(select p.post_feed_id, max(p.post_id) as maxpi
from posts p
group by p.post_feed_id
) pf
on p.post_id = pf.maxpi;
在考虑获得多个之前,您必须考虑如何在Feed中分配它们。