我正在尝试运行一个查询,该查询将一个类中的主题总数相加。一个班有许多科目。在教师(用户表)和班级之间有一个“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

至于你的问题,你不需要两个循环。这是一个包含三列的结果集,我的重写清楚地表明了这一点。只需要一个循环就可以读取所有结果。

10-04 12:41