2013-08-27 52 views
-1

我有兩個表,一個選擇題問卷(每用戶回答一系列的問題):MySQL的嵌套AND和幾個條件

users (userID, name, email) 

votes (voteID, userID, questionID, answerID) 

的樣本數據(用戶):

0, Some Name, [email protected] 
1, Other Name, [email protected] 

示例數據(votes):

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

哪一欄顯示答案是否正確?如何? – 7alhashmi

+0

我正在打印出users.userID,users.name和users.email。 –

回答

0

至於我可以看到它,現在你需要使用一個INNER JOIN對於每個問題,所以每個內部連接看起來就像這樣:

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

重複這每一個問題,你可以檢查它。

+0

這可能適用於一個或兩個內部聯接,但如果達到三個或更多,則需要很長時間並最終超時。 –

0

如果我正確地理解了你,你希望那些已經回答了所有問題的用戶正確。在這種情況下,您應該使用INTERSECT而不是UNION

但是對於這個問題,您可以多次觸碰表格。在「((question1 and Answer1)or(question2 and Answer2))」中最好使用OR子句。最後做一個基於用戶標識符的組,並獲得正確答案的數量,並只提取那些擁有全部正確答案的成員。

+0

您正在糾正我的意圖 - 但它不適用於INTERSECT而不是UNION。 我寧願你的第二個建議,但我不太明白查詢的樣子。 –

+0

select * from userid其中userid(從qusetions中選擇用戶標識,其中(qusetion1和answer1)或(qusetion2和answer2)或.. group by by userid count(qusetionid)= ) –

+0

感謝您的試用,Mani,但我cann讓你的查詢工作 - 我用正確的表格重新編寫了它,但仍然沒有任何結果。 –