私は成績表を作成していますが、以下のコードは機能しますが、非常に遅いです。表の最初の列は各生徒の名前で、各セルのあとがきは特定の質問に対応し、生徒の答えを示しています。すべての生徒が与えられた質問に答えているわけではありません。
現在、ループがあり、ユーザーごとに、質問ごとにそのループ内にループがあります。
各質問には一意の ID があり、別のテーブルには、各回答に対応するユーザー ID と対応する質問 ID があります。
同様の投稿を探しましたが、うまくいきませんでした。php を使用して数か月しか経っていないので、アドバイスをいただければ幸いです。
質問
| | ID | 質問 | 選択 1 | 選択 2 | 選択 3 | 選択 4 | 正しい答え | カテゴリ ID |
回答
| | ID | 質問ID | ユーザー ID | 生徒の答え |
ユーザー
| | ID | ファーストネーム |
ありがとう
//Select all questions from a specific category $mid defined by user
$questionQuery = mysql_query("SELECT * FROM questions WHERE mid = $mid");
$questionCount = mysql_num_rows($questionQuery);
//Blank space in table above users
echo "<tr><td></td>";
//Question Number, each category has a different number of questions
for ($q = 0; $q < $questionCount; $q++){
echo "<td>" . ($q+1) . "</td>";
}
echo "</tr>";
//Select all students for a given teacher
$userQuery = mysql_query("SELECT * FROM users WHERE teacherId = $userid ORDER BY `block`, `lastName`");
$userCount = mysql_num_rows($userQuery);
for($s = 0; $s < $userCount; $s++){
$currentUserId = mysql_result($userQuery, $s, 0);
//Echo student's name
echo "<tr class='user" . ($s%2) ."'><td>" . mysql_result($userQuery, $s, 1) . "</td>";
//Load current question id
for ($q = 0; $q < $questionCount; $q++){
$questionNum = mysql_result($questionQuery, $q, 0);
//Selects students answer from answers database for above question
$answerQuery = mysql_query("SElECT * FROM answers WHERE questionId = $questionNum AND userId = $currentUserId");
$answerCount = mysql_num_rows($answerQuery);
//If no answers move on to next cell
if($answerCount == 0){
echo "<td></td>";
}
else{
$currentAnswer = mysql_result($answerQuery, 0, 3);
$correctAnswer = mysql_result($questionQuery, $q, 6);
if ($currentAnswer == $correctAnswer){
echo "<td class='right'><div id='parent'>" . $currentAnswer . "</div></td>";
}
else{
echo "<td class='wrong'><div id='parent'>" . $currentAnswer . "</div></td>";
}
}
}
echo "</tr>";
}