我有两个表用于多项选择问卷(每个用户回答一系列问题):
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";
但这只会让所有用户返回一个正确答案。
如何正确查询以选择具有正确答案的所有用户?
答案 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执行一个组并获取正确答案的计数,并仅获取那些具有正确答案的成员。