-1

多肢選択式アンケート用に 2 つのテーブルがあります (各ユーザーが一連の質問に回答します)。

users (userID, name, email)

votes (voteID, userID, questionID, answerID)

サンプルデータ ( users ):

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";

ただし、これはすべてのユーザーに1 つの正解を返すだけです。

正しい回答を持つすべてのユーザーを選択する正しいクエリを作成するにはどうすればよいですか?

4

2 に答える 2

0

私が見る限り、質問ごとに INNER JOIN を使用する必要があるため、各内部結合は次のようになります。

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

各質問に対してこれを繰り返すと、確認できます。

于 2013-08-27T11:16:10.480 に答える
0

私があなたを正しく理解していれば、すべての質問に正しく答えたユーザーが必要です。その場合、UNION の代わりに INTERSECT を使用する必要があります。

しかし、これについては、質問と同じくらい何度もテーブルにぶつかっています. where "((question1 and Answer1) or (question2 and Answer2))" で OR 句を使用することをお勧めします。最後に、ユーザーIDに基づいてグループを作成し、正解の数を取得して、すべての正解を持つメンバーのみを取得します.

于 2013-08-27T11:16:41.607 に答える