MySQL嵌套了ANDs和几个条件

时间:2013-08-27 11:11:53

标签: mysql select pdo

我有两个表用于多项选择问卷(每个用户回答一系列问题):

users (userID, name, email)

votes (voteID, userID, questionID, answerID)

示例数据(用户):

0, Some Name, some@thing.com
1, Other Name, some@one.com

示例数据(投票):

0, 1, 1, 1
1, 1, 2, 2
2, 1, 3, 2

我想选择所有拥有正确答案的用户。

我试过这个(我已经硬编码了答案):

$sql = "SELECT users.userID, users.name, users.email FROM users
INNER JOIN votes ON (users.userID = votes.userID)
WHERE (votes.questionID = '1' AND votes.answerID = '1')
AND (votes.questionID = '2' AND votes.answerID = '2')
AND (votes.questionID = '3' AND votes.answerID = '2')
AND (votes.questionID = '4' AND votes.answerID = '3')
AND (votes.questionID = '5' AND votes.answerID = '1')
GROUP BY users.userID";

但这不会返回任何东西。

我也试过这样的事情(我也在那里硬编码了答案):

$sql = "SELECT users.userID, users.name, users.email FROM users
INNER JOIN transfertipsvotes ON (users.userID = transfertipsvotes.userID)
WHERE (transfertipsvotes.questionID = '1' AND transfertipsvotes.answerID = '1') GROUP BY users.userID
UNION
SELECT users.userID, users.name, users.email FROM users
INNER JOIN transfertipsvotes ON (users.userID = transfertipsvotes.userID)
WHERE (transfertipsvotes.questionID = '2' AND transfertipsvotes.answerID = '2') GROUP BY users.userID
UNION
SELECT users.userID, users.name, users.email FROM users
INNER JOIN transfertipsvotes ON (users.userID = transfertipsvotes.userID)
WHERE (transfertipsvotes.questionID = '3' AND transfertipsvotes.answerID = '2') GROUP BY users.userID";

但这只会让所有用户返回一个正确答案。

如何正确查询以选择具有正确答案的所有用户?

2 个答案:

答案 0 :(得分:0)

据我所知,你现在需要为每个问题使用INNER JOIN,因此每个内连接都将如下所示:

INNER JOIN votes AS q1 ON (users.userID = q1.userID) AND q1.questionID = '1' AND q1.answerID ='1'

对每个问题重复此操作,您可以检查它。

答案 1 :(得分:0)

如果我理解正确,您希望回答所有问题的用户都正确无误。在这种情况下,您应该使用INTERSECT而不是UNION

但是对于你来说,你的问题多次出现在桌面上。最好在“((问题1和答案1)或(问题2和答案2))”中使用OR子句。最后根据用户ID执行一个组并获取正确答案的计数,并仅获取那些具有正确答案的成员。