PHP PDO离开了字段不匹配的连接表

时间:2013-06-29 23:18:11

标签: php sql join pdo left-join

我正在为希望他们的测验结果自动保存并且我遇到问题的客户构建测验,我正在尝试选择用户在某个测验中没有回答的所有问题,我将已经回答的每个问题的结果保存到表RESULTS但是当多个用户在RESULTS表中有结果时,如果有人可以查看我的话,我的说法就会搞乱代码并给我任何建议,非常感谢。提前致谢!

基于这些表和语句,我需要加载的下一个问题是que_id = 3 use_id = 1,但我遇到的问题是它返回que_id = 1和{{ 1}}因为用户que_id = 3use_id = 2已经回复了他们,再次感谢!

问题表

use_id 3

结果表

que_id qui_id que_question que_ans_id
1      1      lorem 1?     1
2      1      lorem 2?     6
3      1      lorem 3?     12

PHP

res_id res_use_id res_qui_id res_que_id res_ans_id
1      1          1          1          2
2      1          1          2          6
3      2          1          3          10
4      3          1          1          1

2 个答案:

答案 0 :(得分:2)

您正在尝试获取匹配的行。我们的想法是使用left outer join来获取匹配的行。 。 。然后检查没有匹配的地方。这需要两件事:(1)将条件移到on子句和(2)检查where子句中是否匹配:

SELECT *
FROM roa_quiz LEFT JOIN
     roa_questions
     ON qui_id = que_qui_id LEFT JOIN
     roa_results
     ON que_id = res_que_id and res_use_id = :use_id
where qui_id = :qui_id AND results.res_que_id is null

答案 1 :(得分:0)

我会选择sql:

SELECT * FROM roa_quiz
JOIN roa_questions ON qui_id = que_qui_id
LEFT JOIN roa_results ON que_id = res_que_id AND res_use_id = :use_id
WHERE qui_id = :qui_id
AND res_id IS NULL

这应该会为用户提供测验的未答复问题列表。 Have a look here for some useful diagrams on sql joins。在这种情况下,我们需要一个左外连接,带有排除。