我有两个表:用户和教训。
当前,我使用以下方式选择所有用户:
SELECT * FROM users WHERE user_type = 1;
然后使用PHP对它们进行循环,并使用
SELECT COUNT(*) FROM lessons WHERE student_id=users.user_id;
我想把这个组合到一个查询中,我很确定这是可以通过连接实现的,但这超出了我的基本SQL知识。
在一个查询中完成所有这些操作。 如果要计算每个用户的计数:
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
您可以使用联接或相关子查询:
select
u.*,
(select count(*) from lessons l where l.student_id = u.user_id) no_lessons
from users u
子查询解决方案的优点是它不需要在外部查询中进行聚合。 有了lessons(student_id)
的索引,这应该是一个有效的选项。
您可以为此编写以下查询:
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),GROUP BY子句将对具有相同id的所有记录进行分组,因为您只需要每个用户的lessons数。