Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用JOIN时,我得到的行数超过了预期的行数_Php_Mysql_Join - Fatal编程技术网

Php 使用JOIN时,我得到的行数超过了预期的行数

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

我想加入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次。如果它是英语中正确的单词,则返回所有排列。我有一个考试,有三个问题和三个考生。第一个考生回答了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'`: