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

Php 避免在成绩册的循环中查询,php,mysql,loops,Php,Mysql,Loops,我正在做一个成绩册,虽然下面的代码有效,但速度非常慢。表格的第一列是每个学生的名字,然后每个单元格后面的单词对应一个特定的问题,并显示学生的答案。不是每个学生都回答了给定的问题 现在我有一个循环,对于每个用户,每个问题都有一个循环 每个问题都有一个唯一的id,在一个单独的表中,每个答案都有一个对应的用户id和一个对应的问题id 我一直在寻找类似的职位没有运气,我只与php工作了几个月,所以任何建议将不胜感激 问题 |id |问题|选项1 |选项2 |选项3 |选项4 |正确答案|类别id| 答复

我正在做一个成绩册,虽然下面的代码有效,但速度非常慢。表格的第一列是每个学生的名字,然后每个单元格后面的单词对应一个特定的问题,并显示学生的答案。不是每个学生都回答了给定的问题

现在我有一个循环,对于每个用户,每个问题都有一个循环

每个问题都有一个唯一的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>";
      }
//从用户定义的特定类别$mid中选择所有问题
$questionQuery=mysql_查询(“从mid=$mid的问题中选择*);
$questionCount=mysql\u num\u行($questionQuery);
//用户上方表格中的空格
回声“;
//问题编号,每个类别有不同数量的问题
对于($q=0;$q<$questionCount;$q++){
回音“($q+1)。”;
}
回声“;
//为给定教师选择所有学生
$userQuery=mysql\u query(“从用户中选择*,其中teacherId=$userid按`block`、`lastName`'排序);
$userCount=mysql\u num\u行($userQuery);
对于($s=0;$s<$userCount;$s++){
$currentUserId=mysql\U结果($userQuery,$s,0);
//呼应学生姓名
echo“.mysql_结果($userQuery,$s,1)。”;
//加载当前问题id
对于($q=0;$q<$questionCount;$q++){
$questionNum=mysql\u结果($questionQuery,$q,0);
//从答案数据库中为上述问题选择学生答案
$answerQuery=mysql\u query(“从questionId=$questionNum和userId=$currentUserId的答案中选择*);
$answerCount=mysql\u num\u行($answerQuery);
//如果没有答案,请转到下一个单元格
如果($answerCount==0){
回声“;
}
否则{
$currentAnswer=mysql\u结果($answerQuery,0,3);
$correctAnswer=mysql\U结果($questionQuery,$q,6);
如果($currentAnswer==$correctAnswer){
回显“$currentAnswer.”;
}
否则{
回显“$currentAnswer.”;
}
}
}
回声“;
}

请描述您的数据模型。我不想从你的SQL语句中猜到。你的查询太多了。。。更改此选项:从questionId=$questionNum和userId=$currentUserId的答案中选择*,从userId=$currentUserId的答案中选择*,然后循环所有答案并填充行。感谢CBroe,我添加了相关表的结构