繁体   English   中英

使用COUNT(PHP MySQL)累加行号并显示总计

[英]Adding up row number and displaying total using COUNT (PHP MySQL)

我正在尝试运行一个查询,该查询将一个类中的学科总数加起来。 一堂课有很多科目。 在教师(用户表)和班级之间有一个“教师班级”表。 原理听起来很简单,但在让我的页面显示每个班级的科目数(与老师直接相关)时遇到了一些麻烦

到目前为止,这就是我尝试使用带有嵌套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

至于您的问题,您不需要两个循环。 正如我的重写清楚显示的那样,这是一个包含三列的单个结果集。 您只需要一个循环即可读取所有结果。

SELECT count(*) FROM subjects GROUP BY subjects.classid

您不需要“ subselect”,只需执行JOIN和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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM