3

如果这个问题的标题不清楚,请原谅我,因为我正在努力为我正在寻找的东西找到一个名字。所以请耐心等待我解释:

假设我有以下表格:

现在假设表中有 5 个条目feeds

the great splog每天发布 100 个帖子

unknown blog 1每天unknown blog 4发布 1 或 2 个帖子

我们将定期获取这些提要并将它们的帖子保存在posts表格中。

但是,如果我是表select中的最后 10 个条目posts,则很有可能所有 10 个帖子都属于the great splog,因为它今天发布的帖子比其他 4 个不知名的人多。

但我不希望来自同一个提要的 10 个帖子,我希望select查询了解这种情况并选择 - 例如 - 仅从表中选择 2 个the great splog由其他未知博客编写的条目和 8 个由其他未知博客编写的条目posts

你如何去实现这样的查询?

4

2 回答 2

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;
于 2013-05-31T21:56:30.870 回答
1

您可以使用以下语句从每个提要中获取最后一篇文章:

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;

在您考虑获得不止一个之前,您必须考虑如何在提要中分配它们。

于 2013-05-31T22:28:25.667 回答