我想加入4张桌子。我希望它返回4行,同时返回36行。这意味着我期望重复9次的结果。
$result=mysql_query("SELECT *
FROM exam
INNER JOIN studentexam ON exam.id = studentexam.examID
INNER JOIN question ON exam.id = question.examID
INNER JOIN answer ON exam.id = answer.examID
WHERE exam.id=$examID");
while($row=mysql_fetch_array($result)){
if($row['type']=='singleChoice'){
print $row['examID'].'*'.$row['studentID'].'*'.$row['questionID'].'<br>';
}
}
我想要的结果是: 99 * 922723627 * 25 - 99 * 922723627 * 26 - 99 * 922723627 * 27 - 99 * 922723628 * 25 - 但我得到了9次。它返回所有排列(如果它是正确的英文单词)。我有1个考试,3个问题和3个候选人。第一个候选人回答了3个问题,第二个回答了1个问题,第三个没有参加考试。 1 * 3 * 3 * 4 = 36
我多次使用JOIN,但真的很困惑。怎么了?!
答案 0 :(得分:1)
由于对studentexam,问题和答案之间的任何联接没有限制,您将获得所有学生参加给定考试,每次记录再次提出所有问题,并再次提出所有问题。
我猜你只对每个学生对具体问题给出的答案感兴趣,而不是所有考试题的笛卡尔积和所有参加考试的学生。
所以你要加入的答案
answer.examid = exam.id
AND answer.studentid = student.id
AND answer.questionid = question.id
整个查询类似于
SELECT studentexam.examId, studentexam.studentid, question.id, answer.id
FROM studentexam
INNER JOIN question ON exam.id = question.examID
INNER JOIN answer ON answer.examid = exam.id
AND answer.studentid = studentexam.studentid
AND answer.questionid = question.id
WHERE exam.id=$examID"
请注意,我也省略了考试,因为您似乎想要的是已经在studentexam中的考试