2011-05-24 64 views
1

这是mysql表。查询选择已回答每个问题的答案集中的所有问题的用户

  User Question Answer 
      20  1   answer1_2 
      20  2   answer2_5 
      20  3   answer3_1 
      726  1   answer1_2 
      726  2   answer2_5 
      726  3   answer3_1 

我想谁给的所有问题的答案, 的用户,我们有组预定义的每个问题的答案。

喜欢问1可以从答案answer1_1,answer1_2,answer1_3 问题2可具有answer2_1,answer2_2,answer2_3

答案起初,我想这样的查询:

  SELECT GROUP_CONCAT(DISTINCT CAST(User AS CHAR)) allUsers, COUNT(DISTINCT User) totalUsers 
      FROM survey 
      WHERE 
      (
       (
       Question =1 
       AND Answer = 'answer1_2' 
       ) 
       OR (
       Question =1 
       AND Answer = 'answer1_2' 
       ) 
       OR (
       Question =1 
       AND Answer = 'answer1_3' 
       ) 
      ) 
      AND (
       (
       Question =2 
       AND Answer = 'answer2_1' 
       ) 
       OR (
       Question =2 
       AND Answer = 'answer2_2' 
       ) 
       OR (
       Question =2 
       AND Answer = 'answer2_3' 
       ) 
      ) 

后来我看到结果,并意识到所有问题中的“AND”不适用于我的要求 ,但我需要结果与该逻辑。

表结构无法更改。

回答

1

你可以这样做:

Select user, count(answer) from survey group by user having count(answer)=3 
+0

我们还必须指定每个问题的可能答案。 您的解决方案将确保只给出所有答案。 – 2011-05-24 09:05:57

+0

然后,您可以将其链接并选择与上述查询中的所有用户相匹配的所有用户 - 您没有提到您需要答案,您说您需要用户。 – BugFinder 2011-05-24 09:30:02

0

如果您对领域UserQuestion唯一的密钥,那么你可以做这样的事情:

SELECT count(Question) answers_no, .... FROM survey GROUP BY User HAVING answers_no = num_total_questions 

你可以通过num_total_questions作为从应用程序变量