MySQL-如何限制基于外键的查询结果
我有一个用户表、一个帖子表和一个查询MySQL帖子的搜索功能 我希望它返回100个特定用户的所有帖子,每个用户最多6篇帖子 我在posts表中有一个名为user_id的列,它是一个外键 现在我可以像这样返回这些用户的所有帖子:MySQL-如何限制基于外键的查询结果,mysql,sql,database,Mysql,Sql,Database,我有一个用户表、一个帖子表和一个查询MySQL帖子的搜索功能 我希望它返回100个特定用户的所有帖子,每个用户最多6篇帖子 我在posts表中有一个名为user_id的列,它是一个外键 现在我可以像这样返回这些用户的所有帖子: SELECT id FROM posts WHERE user_id IN (1,2,3,4 .... 98,99,100); 然而,这些用户中有许多人有数百篇帖子。我想把它限制在每个用户6个。如何向查询中添加这样的约束 我正在使用MySQL 8.0.15版MySQL
SELECT id FROM posts WHERE user_id IN (1,2,3,4 .... 98,99,100);
然而,这些用户中有许多人有数百篇帖子。我想把它限制在每个用户6个。如何向查询中添加这样的约束
我正在使用MySQL 8.0.15版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;
可以使用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;
卢卡斯的回答很好。但是,您不需要使用行号: 注意:当用户的帖子少于6篇时,ALL将处理这种情况
有了postsuser_id,col_time的索引,我们很想知道这是比ROW_NUMBER快还是慢。Lukasz的答案很好。但是,您不需要使用行号: 注意:当用户的帖子少于6篇时,ALL将处理这种情况
在postsuser\u id、col\u time上有一个索引,很有兴趣知道这是比ROW\u NUMBER快还是慢。您可以使用LIMIT。@MariosNikolaou谢谢您,但我认为您没有正确理解我的问题。我知道如何限制使用limit的帖子总数。我想将每个用户的帖子数量限制为6篇。您使用的MySQL版本是什么?@TimBiegeleisen 8.0.15您可以使用limit。@MariosNikolaou谢谢,但我认为您没有正确理解我的问题。我知道如何限制使用limit的帖子总数。我想将每个用户的帖子数量限制为6篇。您使用的是什么版本的MySQL?@TimBiegeleisen 8.0.15再等一分钟,以接受这一正确答案,但这很快就奏效了。完美的这使我的查询时间从大约12秒降到了0.5秒,再花一分钟来接受这一正确答案,但这在任何时候都像一个魅力。完美的这使我的查询时间从大约12秒减少到了0.5秒