我正在从一个表(名称)中选择数据。在另一个表格中,我有老师的名字。
当我从表中选择数据时,如何计算每位教师的总姓名?
例:
$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 BY
和LIMIT 50
。
您还可以在 PHP 中遍历所有行,并将每个教师计数到一个关联数组中,然后索引到该数组中以找到总数。这需要先获取所有数据,然后循环回去显示。这将计算返回数据集中的名称数,而不是整个表。