对于一个很长的问题,我很抱歉,只是想详细解释一下。我的格式不是很好,也很抱歉。我有一个 PHP/MySQL 应用程序,它基本上不是真正的关系,因为我有一个用于所有学生分数的大表。除其他外,我能够计算每个科目的平均分数,这样平均分数就会出现在学生的分数旁边。现在我已经拆分了表格,有一些表格,我可以像以前一样成功地查询和创建学校成绩单。困难在于我无法再计算任何主题的平均数。
因为我有一张表,有 5 个科目,每个科目有 2 个测试,所以我查询数据并计算平均值如下:
一张表(列):
id date name exam_no term term year eng_mid eng_end mat_mid mat_end phy_mid phy_end bio_mid bio_end che_mid che_end
一个查询:
$query = "SELECT * FROM pupils_records2
WHERE grade='$grade' && class='$class' && year = '$year' && term ='$term'";
$result = mysqli_query($dbc, $query);
if (mysqli_num_rows($result) > 0) {
$num_rows=mysqli_num_rows($result);
while($row = mysqli_fetch_array($result)){
//English
$eng_pupils1{$row['fname']} = $row['eng_mid'];
$eng_pupils2{$row['fname']} = $row['eng_end'];
$mid=(array_values($eng_pupils1));
$end=(array_values($eng_pupils2));
$add = function($a, $b) { return $a + $b;};
$eng_total = array_map($add, $mid, $end);
foreach ($eng_total as $key => $value){
if ($value==''){
unset ($eng_total[$key]);
}
}
$eng_no=count($eng_total);
$eng_ave=array_sum($eng_total)/$eng_no;
$eng_ave=round($eng_ave,1);
//数学
$mat_pupils1{$row['fname']} = $row['mat_mid'];
$mat_pupils2{$row['fname']} = $row['mat_end'];
$mid=(array_values($mat_pupils1));
$end=(array_values($mat_pupils2));
$add = function($a, $b) { return $a + $b;};
$mat_total = array_map($add, $mid, $end);
foreach ($mat_total as $key => $value){
if ($value==''){
unset ($mat_total[$key]);
}
}
print_r($mat_total);
$mat_no=count($mat_total);
echo '<br />';
print_r($mat_no);
$mat_ave=array_sum($mat_total)/$mat_no;
$mat_ave=round($mat_ave,1);
}
}
//生物学等
我将表拆分为单独的表,并将名称放在单独的表中,计算平均值时不需要,所以我不会在这里展示。每个主题表都采用以下形式:
id date exam_no term year grade class test*
*测试将是 eng_mid 或 eng_end 或 mat_mid 等。
因为我只有一个查询返回 10 行(5 个科目,每个科目有两个测试:例如 eng_mid(英语MIT 考试),eng_end(英语期末考试),我能够在一次调用中捕获所有行并将每个科目打包到一个数组,然后在array_map的帮助下计算出类平均值。它可能不优雅,但效果很好。现在,我将每个测试都放在它自己的表中。
我试图写一个联合以获得一个信号结果集,但查询失败。列如下:
我知道数据库设计并不是什么值得骄傲的事情,但是来自一个巨大的单表,这是一个巨大的进步(值得拍拍肩膀)。
我希望做的是能够查询我所有的数据并计算班级平均值(每个班级大约 30 名学生)。我尝试使用单独的查询,但遇到了障碍,因为以前我会使用 WHILE 条件,如查询后所示,它可以拉出所有行并创建一个数组,我可以从中获得所需的结果。现在,由于连接不起作用,几个查询让我对如何归档相同的结果感到困惑。我还有一个单独的 $row 变量,这让我更加失衡!
甚至有可能像我在臭名昭著的一张桌子上(从黑暗的一面)做的那样做平均值,还是我的桌子设计如此混乱,我想要的只是人类不可能?
请任何帮助将不胜感激。