假设我有 2 个表:blog_posts 和 categories。每篇博文只属于一个类别,所以这里的 2 个表之间基本上有一个外键。
我想从每个类别中检索 2 个最后的帖子,是否可以在单个请求中实现? GROUP BY 会将所有内容分组,并在每个类别中只留下一行。但我想要其中的 2 个。
执行 1 + N 查询很容易(N = 类别数)。首先检索类别。然后从每个类别中检索 2 个帖子。
我相信执行 M 个查询也很容易(M = 我想从每个类别中获得的帖子数)。第一个查询为每个类别选择第一个帖子(使用分组依据)。第二个查询检索每个类别的第二个帖子。等
我只是想知道是否有人对此有更好的解决方案。我真的不介意为此做 1+N 次查询,但出于好奇心和一般的 SQL 知识,我将不胜感激!
提前感谢谁可以帮助我。
最佳答案
看看这个 MySQL article关于如何处理任意复杂分组中的前 N 个事物;这是好东西。你可以试试这个:
SET @counter = 0;
SET @category = '';
SELECT
*
FROM
(
SELECT
@counter := IF(posts.category = @category, @counter + 1, 0) AS counter,
@category := posts.category,
posts.*
FROM
(
SELECT
*
FROM test
ORDER BY category, date DESC
) posts
) posts
HAVING counter < 2
关于sql - 为每个类别检索 2 个最新帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907534/