计算另一行中的条目数


Count number of entries in another row

我正在从一个表(名称)中选择数据。在另一个表格中,我有老师的名字。

当我从表中选择数据时,如何计算每位教师的总姓名?

例:

$q = mysql_query("SELECT * FROM names ORDER BY limit 50");
while($row = mysql_fetch_array($q)){
    $name = $row['name'];
    $teacher $row['teacher'];
    $total = ?????
    echo "the name is $name and the teacher is $teacher (total number for this teacher is $total";
}

我怎样才能做到这一点?

SELECT teachersTable.*, COUNT(`names`.`id`) as NamesCount FROM `teachersTable`
LEFT JOIN `names` ON `teachersTable`.`id`=`names`.`teacherid`
GROUP BY `teachersTable`.`id`

使用它作为查询,NamesCount 列应该是每个教师的名字数量

最简单的方法可能是在数据库查询中聚合它。像这样的东西(如果我理解正确的话):

SELECT n1.*, (SELECT COUNT(*) FROM names n2 WHERE n2.teacher = n1.teacher) AS total
FROM names n1
ORDER BY ...
LIMIT 50

请注意,这将计算整个表中的名称数。如果需要它仅计算前 50 个,则还必须在子查询中指定ORDER BYLIMIT 50


您还可以在 PHP 中遍历所有行,并将每个教师计数到一个关联数组中,然后索引到该数组中以找到总数。这需要先获取所有数据,然后循环回去显示。这将计算返回数据集中的名称数,而不是整个表。