可以说我有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