一尘不染

检索每个类别的2个最新帖子

mysql

可以说我有2个表:blog_posts和类别。每个博客帖子仅属于一个类别,因此此处的两个表之间基本上有一个外键。

我想从每个类别中检索2个最新的帖子,是否可以在单个请求中实现?GROUP BY会将所有内容分组,而在每个类别中只剩下一行。但我要其中两个。

执行1 + N查询(N =类别数)会很容易。首先检索类别。然后从每个类别检索2个帖子。

我相信执行M个查询(M =我希望从每个类别获得的帖子数)也非常容易。第一个查询为每个类别(分组依据)选择第一篇文章。第二个查询检索每个类别的第二个帖子。等等

我只是想知道是否有人对此有更好的解决方案。我真的不介意为此进行1 + N查询,但是出于好奇和一般的SQL知识,我们将不胜感激!

在此先感谢谁可以帮助我。


阅读 247

收藏
2020-05-17

共1个答案

一尘不染

查看 这篇 关于如何处理任意复杂分组中前N个问题的
MySQL文章
;这是好东西。您可以尝试以下方法:

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
2020-05-17