当前位置: 首页 > 面试题库 >

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

孔扬
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

查看 这篇 关于如何处理任意复杂分组中前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


 类似资料:
  • 问题内容: 如果我有一个具有以下结构和数据的表: 我将使用哪种查询来获得以下结果(随后的说明): 如你看到的: 每个仅返回一行。 最高的那一行是返回的那一行。 是否有一种 无需 使用子查询即可完成此操作的方法?该程序经过的关系代数术语中是否有名称? 问题答案: 该查询称为逐组最大值,它(至少在MySQL中)可以通过子查询实现。例如: 在sqlfiddle上看到它。

  • 问题内容: 我有此数据: 代码(对于SQL Server 2005): 我想为每个名称获取具有最新DATE的ID。像这样: 实现此目的最优雅的方法是什么? 问题答案: 尽量避免使用保留字(和模糊的列名),例如…

  • 问题内容: 我有一个项目数据库。每个项目都按类别表中的类别ID进行分类。我正在尝试创建一个列出每个类别的页面,并在每个类别下方显示该类别中的4个最新项目。 例如: 宠物用品 宠物食品 我知道我可以通过查询数据库来轻松解决此问题,如下所示: 然后遍历该数据并查询数据库中的每个类别以获取最新的项目: 我要弄清楚的是,我是否可以仅使用1个查询并获取所有这些数据。我有33个类别,因此我认为这可能有助于减少

  • 问题内容: 我的数据如下所示: 我要完成的工作是按类别获取最新的2个条目(按insertdate DESC的顺序排列),因此结果应为: 使用获取最新消息很容易,但是如何在不启动多个查询的情况下获取最新2? 感谢您的帮助;-) S. 问题答案: 在这里,你哥们!

  • 问题内容: 我有一张表如下 预期输出:name8,name7,name6,name3,name2 我希望在每个类别中显示最后2个条目吗?有人请帮帮我。谢谢你的放心。 问题答案: 这些类型的结果最好由其他RDBMS中的窗口函数来处理,但是不幸的是Mysql没有任何窗口函数,因此作为替代方案,存在一种使用用户定义的变量为属于同一组的行分配等级的解决方案。 上面的查询将为您提供每个类别2条最近记录(基于

  • 问题内容: 我有一张桌子上有用户帖子。我需要显示每天每位用户从1到最多n条帖子。 例子: 我需要一个查询,例如返回每个用户每天最多2条帖子的查询: 我尝试使用GROUP和HAVING,但是我仅获得前n个记录,而不是每个用户每天的前n个记录: 问题答案: 试试这个糟糕的SQL代码:) 结果: 在这里摆弄。 我认为如果按日期降序排序会更合适,因为实际上是最接近当前日期的前2位。