使用COUNT添加行号并显示总数(PHP MySQL)

时间:2010-04-08 21:23:42

标签: php mysql count

我正在尝试运行一个查询,该查询会累计课程中的主题总数。一堂课有很多科目。教师(用户表)和班级之间有一个“教师班”表。这些原则听起来很简单但我在让我的页面显示每个班级的科目数量(与教师直接相关)方面遇到了一些麻烦

这是我到目前为止所做的,尝试使用嵌套的SELECT:

来使用COUNT
SELECT (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子句,但我认为我的查询对我来说太复杂了,错误随处可见。任何人都可以快速解决这个问题!非常感谢

3 个答案:

答案 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