我正在尝试运行一个查询,该查询将一个类中的主题总数相加。一个班有许多科目。在教师(用户表)和班级之间有一个“teachers classes”表。原则听起来很简单,但我在让页面显示每堂课的科目数(与老师直接相关)时遇到了一些困难
到目前为止,我一直在尝试使用嵌套SELECT的COUNT:
SELECT (SELECT count(*) FROM subjects WHERE subjects.classid = class.classid) AS total_subjects, class.classname, class.classid
从班级
然后我调用“num_subjects”来显示while循环中的总数:
<?php echo $row['total_subjects']?>
从上面可以看出,我收到了一个类的全部主题,但是在同一个表行(一个类)中,我的另一个while循环不再运行,它将返回与教师关联的所有类:(。。。现在有点乱了!
我知道要为某个老师返回课程,我可以在“teacherid”会话中执行一个额外的WHERE子句,但我认为我的查询对我来说太复杂了,错误到处都是。任何人都能很快解决这个问题!非常感谢
最佳答案
您的查询可能不是最优的。最好将其重写为联接:
SELECT
total_subjects,
class.classname,
class.classid
FROM class
JOIN (
SELECT classid, count(*) AS total_subjects
FROM subjects
GROUP BY classid
) AS T1
ON T1.classid = class.classid
至于你的问题,你不需要两个循环。这是一个包含三列的结果集,我的重写清楚地表明了这一点。只需要一个循环就可以读取所有结果。