避免在成绩册的循环中查询

时间:2013-03-16 20:49:50

标签: php mysql loops

我正在制作成绩簿,虽然下面的代码有效,但速度非常慢。表格的第一列是每个学生的姓名,然后每个单元格后跟对应一个特定的问题,并显示学生回答的内容。并非每个学生都会回答给定的问题。

现在我有一个循环,并为每个用户在每个问题的循环内部循环。

每个问题都有一个唯一的ID,在一个单独的表中,每个答案都有一个相应的用户ID和一个相应的问题ID。

我找了类似的帖子没有运气,我只用了几个月的PHP,所以任何建议将不胜感激。

问题

| id |问题|选择1 |选择2 |选择3 |选择4 | correctAnswer | categoryId |

答案

| id | questionId | userId | studentAnswer |

用户

| id | firstName |

由于

//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>";
      }

0 个答案:

没有答案