0

私は成績表を作成していますが、以下のコードは機能しますが、非常に遅いです。表の最初の列は各生徒の名前で、各セルのあとがきは特定の質問に対応し、生徒の答えを示しています。すべての生徒が与えられた質問に答えているわけではありません。

現在、ループがあり、ユーザーごとに、質問ごとにそのループ内にループがあります。

各質問には一意の 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>";
      }
4

0 に答える 0