2017-10-01 3 views
0

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で修正する必要があることを知っています。 (ID

SELECTクラス、COUNT:

答えて

0

あなたは、HAVING句を使用してクラスとして、結果をグループ化集計SNDを適用することによって、あなたのIDリストから、3以上の学生とのすべてのクラスを返すようにデータベースを依頼することができます)学生FROM num_students_in_classとしてWHEREのid IN(1,2,3,4)クラスHAVING COUNT(ID BY GROUP)> = 3

さらに詳しい情報:あなたに照会したくない場合は How to use group by in SQL Server query? What's the difference between HAVING and WHERE?

+0

いいえ、私はそれを質問したくありません、私は同じクラスのIDを持ついくつの学生が存在するかを数えたいと思います。 – mirvatJ

+0

私は3人以上の学生とクラスを照会するつもりはありません、私は、検査配列に同じクラスに3人以上の学生が含まれているかどうかを探しています – mirvatJ

0

https://stackoverflow.com/a/46517195/100809で提案すると、kにする必要がありますあなたがそれを見たことのあるクラスと回数:

$seenClasses = array_count_values($studs); 

foreach($seenClasses as $class => $numStudents) { 
    if ($numStudents > 4) 
     echo “class $class has $numStudents”; 
} 
関連する問題