我有2个表,类别和文章,我想得到每个类别的5篇文章,表看起来像这样:
category: id, name
articles: id, title, body, category_id所以我通常做的是INNER,但是我得到了所有的行,我如何才能指定每个类别只需要5行,我想它需要SELECT中的SELECT?
发布于 2014-08-31 20:59:27
您可以使用等级查询mysql没有这种类型的结果的窗口函数来获取每个组的n条记录,我不建议使用group_concat解决方案,因为articles术语说可以有足够的数据,并且很容易通过1024个字符的限制如果您增加这个限制,它也依赖于
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个
发布于 2014-08-31 20:53:59
你可以在MySQL中使用group_concat破解你的查询,因为不幸的是MySQL不支持windows函数。不过,它看起来不会很漂亮。
您可以使用this blog post作为灵感来构建所需的查询。
另一种可能是检索类别中的每一篇文章,并在客户端自己过滤前5篇文章(PHP、Java、Python等)。
https://stackoverflow.com/questions/25592126
复制相似问题