MySQL关联子查询问题:筛选满足特定发帖量条件的活跃用户
修正后的MySQL查询语句
方法一:使用相关子查询
SELECT u.* FROM users u WHERE u.active = 1 AND ( SELECT COUNT(p.id) FROM posts p WHERE p.`user` = u.user_id AND p.`time` BETWEEN 1000 AND 2000 ) >= 5 LIMIT 0, 10;
逻辑说明:对每个活跃用户(active=1),通过子查询统计其在1000-2000秒时段内的发帖数量,筛选出发帖数≥5的用户。
方法二:使用JOIN+分组筛选(性能更优)
SELECT u.* FROM users u JOIN posts p ON p.`user` = u.user_id WHERE u.active = 1 AND p.`time` BETWEEN 1000 AND 2000 GROUP BY u.user_id HAVING COUNT(p.id) >= 5 LIMIT 0, 10;
逻辑说明:先关联用户表和帖子表,过滤出活跃用户及指定时段的帖子;按用户ID分组后,通过HAVING子句筛选发帖数≥5的用户。若users.user_id是主键,该写法符合MySQL规范(开启ONLY_FULL_GROUP_BY时也可正常执行)。
提示:如果posts表数据量较大,建议给
user和time字段创建联合索引,可大幅提升查询效率。
内容的提问来源于stack exchange,提问作者user1007828
相关产品推荐
相关产品推荐

