我需要检查是否包含5个学生的考试
存在来自同一班级的3名学生。
这是我尝试的
<?
//this array contains all student id's that are in an exam
$exam = array('s1' => $s1, 's2' => $s2, 's3' => $s3, 's4' => $s4, 's5' => $s5);
$values = implode(", ", $exam);
$sql = "SELECT class FROM students WHERE students.id IN (" . $values . ")";
try{
$db = new db();
$db = $db->connect();
$stmt = $db->query($sql);
$studs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$db = null;
if(!empty($studs)) {
//check if 3 students from the same class are taking the exam
$i = 0; $s = 0;
foreach($exam as $e )
{
if( !in_array( $e, $studs[$i] ) )
{
$exist = FALSE;
}
else {$s++;}
$i++;
}
if ($s<=3) {
#do sth
}
else {
echo "more than 3 students";
}
} else {
echo "error";
}
} catch(PDOException $e) {}
?>
问题我不确定的是如何计算3个学生在此考试中具有相同的类ID。
我知道我需要在我的foreach中解决一些问题,只是没有成功。
您可以要求数据库通过使用abtake a avathing a abtabase使用abtake snd将结果分组给您的ID列表中的3个或更多学生。>
选择" class",count(id)为num_students_in_class,来自学生的ID中的(1,2,3,4)组,包括count(id)> = 3
更多信息:如何在SQL Server查询中使用组?拥有和在哪里有什么区别?
如果您不想查询https://stackoverflow.com/a/46517195/100809中的建议您已经看过:
$seenClasses = array_count_values($studs);
foreach($seenClasses as $class => $numStudents) {
if ($numStudents > 4)
echo “class $class has $numStudents”;
}