开发者社区> 问答> 正文

MySQL-如何基于外键限制查询结果

我有一个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

展开
收起
几许相思几点泪 2019-12-29 19:32:21 1148 0
2 条回答
写回答
取消 提交回答
  • 个人对建模比较关注

    建议数据通过binlog打平到一张表上,然后做处理,或者数据导入openSearch中做查询,速度更快,否则影响mysql性能

    2020-03-25 16:59:49
    赞同 展开评论 打赏
  • 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;
    
    2019-12-29 19:32:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像