Php 显示班级注册的学生总数

Php 显示班级注册的学生总数,php,html,mysql,count,phpmyadmin,Php,Html,Mysql,Count,Phpmyadmin,我正在为学校做一个系统。我的问题是我不能显示每个班级的注册学生总数。我可以在DB/phpmyadmin中查询需要显示的数据。但是对于硬代码,它不起作用。有人能帮忙吗 这是我的密码 <?php $key=""; if(isset($_POST['searchtxt'])) $key=$_POST['searchtxt']; if($key !="") $sql_sel=mysql_query("SElECT * FROM c

我正在为学校做一个系统。我的问题是我不能显示每个班级的注册学生总数。我可以在DB/phpmyadmin中查询需要显示的数据。但是对于硬代码,它不起作用。有人能帮忙吗

这是我的密码

<?php
         $key="";
    if(isset($_POST['searchtxt']))
        $key=$_POST['searchtxt'];

    if($key !="")
        $sql_sel=mysql_query("SElECT * FROM class_tbl WHERE class_name  like '%$key%' ");
    else
            $sql_sel=mysql_query("SELECT * FROM class_tbl");


            $i=0;
    while($row=mysql_fetch_array($sql_sel)){
    $i++;
    $color=($i%2==0)?"lightblue":"white";
        ?>
      <tr bgcolor="<?php echo $color?>">
            <td><?php echo $i;?></td>
            <td><?php echo $row['class_name'];?></td>
            <td><?php echo $row['class_id'];?></td>
            <td><?php echo $row['class_year'];?></td>
            <td><?php

                    $result = mysql_query("SELECT class_name, COUNT( class_name ) FROM stu_tbl c GROUP BY class_name");
                    $num_rows = mysql_num_rows($result);
                    echo "$num_rows";
                    // $total_enrolled=mysql_query("SELECT COUNT( * ) FROM stu_tbl WHERE class_name =  'class_name'");
                    //echo $total_enrolled;
                ?>
我希望输出显示为:

no class_name  class_id  year  total_student_enrolled  
1   1 Amanah    1        2014   6       
2   1 Bestari   2        2014   2       
3   2 Amanah    9        2014   5       
4   2 Bestari   14       2014   10      
5   3 Amanah    15       2014   7       
6   3 Bestari   16       2014   1

已注册的学生总数将根据学生表中的班级名称从学生表中计数,与班级名称关联的学生人数将计算为已注册的学生总数。

此循环内的查询是错误的,这将始终为循环的所有迭代返回相同的结果

SELECT class_name, COUNT( class_name ) FROM stu_tbl c GROUP BY class_name
而且你总是只从它的第一排抓取

应该是

SELECT COUNT(1) FROM stu_tbl c WHERE class_name= 'your variable'
这样的话,你就可以得到那门课的分数了。这与您在注释中禁用的查询几乎完全相同。只是您没有正确地使用变量名


有没有特别的原因,为什么你不尝试用一个选择来做呢?根据类中项目的数量,这将导致您在while子句中发送太多选择。 试试这个:

使用类密钥:

"SELECT 
   class_tbl.class_id, class_tbl.class_name, class_tbl.class_year,
   COUNT(stu_tbl.stu_id) AS total_student
FROM class_tbl
LEFT JOIN stu_tbl ON class_tbl.class_name = stu_tbl.class_name
WHERE class_tbl.class_name  like '%$key%'
GROUP BY class_tbl.class_name"

使用公式参数或查询字符串中的$key值时,请确保避免SQL注入

在条件语句中使用curly bracats,例如-iffoo{foo;}现在是学习SQL注入的好时机,不使用不推荐的APIi的重要性将导致错误,即资源id 7,等等结果将返回0。HMM您的表class_tbl和stu_tbl的结构是什么?stu_tbl stu id int10 unsigned NOT NULL自动增量,stu_name varchar100 NOT NULL,gender char10 NOT NULL,dob date NOT NULL,parent_name varchar50 NOT NULL,parent_ic varchar100 NOT NULL,address varchar100 NOT NULL,phone varchar50 NOT NULL,电子邮件varchar70不为空,类名称varchar100不为空,主键stu_id,唯一键stu_名称stu_名称,唯一键stu_id stu_id,密钥类名称类名称类名称类tbl类id int10无符号非空自动增量,类名称varchar50不为空,类年份int11不为空,总注册int11不为空,主键类id您说它返回了0。这是否意味着它不返回任何班级条目,或者对于每个返回的班级条目,学生人数为0?如果将查询与$key变量一起使用,请确保Where子句位于Group By命令之前,请参见上面的更正。
"SELECT 
   class_tbl.class_id, class_tbl.class_name, class_tbl.class_year,
   COUNT(stu_tbl.stu_id) AS total_student
FROM class_tbl
LEFT JOIN stu_tbl ON class_tbl.class_name = stu_tbl.class_name
GROUP BY class_tbl.class_name"
"SELECT 
   class_tbl.class_id, class_tbl.class_name, class_tbl.class_year,
   COUNT(stu_tbl.stu_id) AS total_student
FROM class_tbl
LEFT JOIN stu_tbl ON class_tbl.class_name = stu_tbl.class_name
WHERE class_tbl.class_name  like '%$key%'
GROUP BY class_tbl.class_name"