假设我有2个表:blog_posts和类别.每篇博文都只属于一个类别,所以这里的两个表基本上都有一个外键.
我想从每个类别中检索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