我有两张table:用户和课程。当前,我使用以下选项选择所有用户:
SELECT * FROM users WHERE user_type = 1;
然后使用php循环遍历它们,并使用
SELECT COUNT(*) FROM lessons WHERE student_id=users.user_id;
我想把它合并到一个查询中,我很确定这可以通过连接实现,但这超出了我的基本sql知识。
o7jaxewo1#
在一个查询中完成这一切。如果需要每个用户的计数:
select u.user_id, count(l.student_id) from users u left join lessons l on u.user_id = l.student_id where u.user_type = 1 group by u.user_id
jdgnovmf2#
可以使用联接或相关子查询:
select u.*, (select count(*) from lessons l where l.student_id = u.user_id) no_lessons from users u
子查询解决方案的优点是它不需要在外部查询中进行聚合。带索引的 lessons(student_id) ,这应该是一个有效的选择。
lessons(student_id)
u4dcyp6a3#
您可以为此编写以下查询:
SELECT * FROM users u LEFT JOIN lessons l ON u.user_id=l.student_id WHERE u.user_type=1 GROUP BY u.user_id
这将根据两个表的id连接这两个表(users和lessons),groupby子句将对所有id相同的记录进行分组,因为您只需要每个用户的课数。
3条答案
按热度按时间o7jaxewo1#
在一个查询中完成这一切。如果需要每个用户的计数:
jdgnovmf2#
可以使用联接或相关子查询:
子查询解决方案的优点是它不需要在外部查询中进行聚合。带索引的
lessons(student_id)
,这应该是一个有效的选择。u4dcyp6a3#
您可以为此编写以下查询:
这将根据两个表的id连接这两个表(users和lessons),groupby子句将对所有id相同的记录进行分组,因为您只需要每个用户的课数。