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