首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql select inner join with limit

mysql select inner join with limit
EN

Stack Overflow用户
提问于 2014-08-31 20:46:45
回答 2查看 256关注 0票数 3

我有2个表,类别和文章,我想得到每个类别的5篇文章,表看起来像这样:

代码语言:javascript
复制
category: id, name
articles: id, title, body, category_id

所以我通常做的是INNER,但是我得到了所有的行,我如何才能指定每个类别只需要5行,我想它需要SELECT中的SELECT?

EN

回答 2

Stack Overflow用户

发布于 2014-08-31 20:59:27

您可以使用等级查询mysql没有这种类型的结果的窗口函数来获取每个组的n条记录,我不建议使用group_concat解决方案,因为articles术语说可以有足够的数据,并且很容易通过1024个字符的限制如果您增加这个限制,它也依赖于

代码语言:javascript
复制
SELECT * FROM (
SELECT *,
@r:= CASE WHEN @g = c.id THEN @r +1 ELSE 1 END rownum,
@g:= c.id catgroup
 FROM category c
 JOIN articles a ON (c.id = a,category_id)
CROSS JOIN (SELECT @g:=0,@r:=0) t2
ORDER BY c.id , a.`date` desc
) t
 WHERE rownum <= 5

上面将在其类别组中对每个文章进行排名,您可以看到rownum别名的结果,而在外部查询中,只需将文章的结果筛选为每个类别组5个

票数 3
EN

Stack Overflow用户

发布于 2014-08-31 20:53:59

你可以在MySQL中使用group_concat破解你的查询,因为不幸的是MySQL不支持windows函数。不过,它看起来不会很漂亮。

您可以使用this blog post作为灵感来构建所需的查询。

另一种可能是检索类别中的每一篇文章,并在客户端自己过滤前5篇文章(PHP、Java、Python等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25592126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档