我正在尝试运行一个查询,该查询会累计课程中的主题总数。一堂课有很多科目。教师(用户表)和班级之间有一个“教师班”表。这些原则听起来很简单但我在让我的页面显示每个班级的科目数量(与教师直接相关)方面遇到了一些麻烦
这是我到目前为止所做的,尝试使用嵌套的SELECT:
来使用COUNTSELECT (SELECT count(*) FROM subjects WHERE subjects.classid = class.classid) AS total_subjects, class.classname, class.classid
FROM class
然后我调用'num_subjects'来在while循环中显示总数:
<?php echo $row['total_subjects']?>
从上面开始,我收到一个类的总主题,但是在同一个表行(对于一个类)和我的另一个while循环不再运行,它返回与教师相关的所有类:(。 ..现在有点混乱!
我知道要返回特定教师的课程,我可以在'teacherid'的会话上做一个额外的WHERE子句,但我认为我的查询对我来说太复杂了,错误随处可见。任何人都可以快速解决这个问题!非常感谢
答案 0 :(得分:1)
您的查询可能不是最佳选择。将它重写为连接可能是个好主意:
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
至于你的问题,你不需要两个循环。这是一个包含三列的结果集,正如我的重写清楚地显示的那样。您只需要一个循环即可读取所有结果。
答案 1 :(得分:0)
SELECT count(*) FROM subjects GROUP BY subjects.classid
答案 2 :(得分:0)
您不需要“subselect”,您只需要加入count()
SELECT
class.*,
count(subjects.*) AS total_subjects
FROM
class
LEFT JOIN subjects ON class.classid = subjects.classid
WHERE
class.teacherid = ?
GROUP BY
class.classid