我有一个users表,一个posts表和一个搜索功能,可以查询MySQL的帖子。
我希望它返回100个特定用户的所有帖子(每个用户最多6个帖子)。
我user_id在posts表上有一列是外键。
现在,我可以像这样为这些用户返回所有帖子:
SELECT id FROM posts WHERE user_id IN (1,2,3,4 .... 98,99,100);
但是,这些用户中有许多都有数百篇文章。我想将每个用户的上限设置为6。如何在查询中添加这样的约束?
我正在使用MySQL版本8.0.15
建议数据通过binlog打平到一张表上,然后做处理,或者数据导入openSearch中做查询,速度更快,否则影响mysql性能
ROW_NUMBER(MySQL 8.0+)可以使用:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY col_time DESC) AS rn
-- taking the newest posts
FROM posts
WHERE user_id IN (1,2,3,4 .... 98,99,100)
) sub
WHERE rn <= 6;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。