Php 使用JOIN时,我得到的行数超过了预期的行数
我想加入4个表。我希望它返回4行,而它返回36行。这意味着我预期的结果会重复9次Php 使用JOIN时,我得到的行数超过了预期的行数,php,mysql,join,Php,Mysql,Join,我想加入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=$exa
$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次。如果它是英语中正确的单词,则返回所有排列。我有一个考试,有三个问题和三个考生。第一个考生回答了3个问题,第二个回答了1个,第三个没有参加考试。
1*3*3*4=36
我用过很多次JOIN,但真的很困惑。怎么了 由于学生考试、问题和答案之间没有任何连接限制,您将获得给定考试的所有学生,每次记录一次所有问题,一次所有问题 我猜你只对每个学生对特定问题的答案感兴趣,而不是所有考试问题和所有参加考试的学生的笛卡尔积 那么你的答案你想加入吗
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中的examid您是否尝试过按studentID分组?@jim否,我不知道它是什么。太好了,它现在可以正常工作了!我整天都在牵扯这件事。我需要所有的表,但我不知道有类似和in JOIN子句的东西。您甚至可以在其中包含与其他表无关的简单约束,例如“JOIN tableB on id=table A.id和tableB.type='foo'`: