Mysql 在3个表中为用户选择最大正确答案

Mysql 在3个表中为用户选择最大正确答案,mysql,sql,subquery,Mysql,Sql,Subquery,我有四张桌子 Users ID Name Questions ID Question User_Answers ID User_ID Answer Question_ID Correct_Answers ID Question_ID Answer_ID 例如,我有这些数据 Users ID = 3 Name = Jack ID = 4 Name = Mike -------------------- Questions ID = 3 Question = text for a qu

我有四张桌子

Users
ID
Name

Questions
ID
Question


User_Answers
ID
User_ID
Answer
Question_ID


Correct_Answers
ID
Question_ID
Answer_ID
例如,我有这些数据

Users
ID = 3
Name = Jack
ID = 4
Name = Mike
--------------------
Questions

ID = 3
Question = text for a question
ID = 4
Question = text for a question
-----------------

User_Answers
ID = 1
User_ID = 3
Answer = 0
Question_ID = 3

ID = 2
User_ID = 3
Answer = 1
Question_ID = 3

ID = 3
User_ID = 3
Answer = 1
Question_ID = 3

ID = 4
User_ID = 3
Answer = -1
Question_ID = 3

ID = 5
User_ID = 3
Answer = 0
Question_ID = 3

ID = 6
User_ID = 3
Answer = 1
Question_ID = 3

-------------------------

Correct_Answers
ID = 1
Question_ID  = 3
Answer = 0

ID = 2
Question_ID  = 4
Answer = -1

ID = 3
Question_ID  = 5
Answer = 0
我需要sql查询,以获得具有正确答案的最多用户

SELECT * 
FROM users,correct_answers,questions,user_answers 
WHERE correct_answers.answer = user_answers.answer 
  AND user_answers.question_id = correct_answers.question_id
这不会像我想要的那样工作,我需要一个子查询来计算正确答案并获得最大值:

这是SQLFIDLE链接

我怎么能做到


感谢您的表结构查询,为用户提供了最正确的答案:

Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
  from (select ua.User_ID, u.Name, if(ua.Answer = ca.Answer, 1, 0) as 
    Correctness from  Users_Answers ua join Questions q 
      on ua.Question_ID = q.ID join correct_answers ca
       on ua.Question_ID= ca.Question_ID join Users u on ua.User_ID = u.ID) as sq
  group by User_ID Desc Order by Most_Correct desc limit 1;
Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
   from (select ua.User_ID, u.Name, if(ua.Answer = q.Answer, 1, 0) as Correctness
      from  User_Answers ua join Questions q 
          on ua.Question_ID = q.ID join User u on ua.User_ID = u.ID) as sq
              group by User_ID Desc Order by Most_Correct desc limit 1;
您还可以创建模式,如下所示:

使用者

问题

ID    |      Question     |    Answer
用户回答

ID    |      User_ID      |    Answer      |    Question_ID
为用户查询最正确的答案:

Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
  from (select ua.User_ID, u.Name, if(ua.Answer = ca.Answer, 1, 0) as 
    Correctness from  Users_Answers ua join Questions q 
      on ua.Question_ID = q.ID join correct_answers ca
       on ua.Question_ID= ca.Question_ID join Users u on ua.User_ID = u.ID) as sq
  group by User_ID Desc Order by Most_Correct desc limit 1;
Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
   from (select ua.User_ID, u.Name, if(ua.Answer = q.Answer, 1, 0) as Correctness
      from  User_Answers ua join Questions q 
          on ua.Question_ID = q.ID join User u on ua.User_ID = u.ID) as sq
              group by User_ID Desc Order by Most_Correct desc limit 1;

请将一些示例数据和所需的输出添加到示例数据的问题中。@AbhikChakraborty Updated是的,我知道,我没有创建架构,他们已经得到了它,但我需要让用户获得最正确的答案。虽然此代码可能有助于回答问题,但仅代码的答案质量不高。更好的答案是解释代码在做什么以及如何使用它。它还将链接到相关文件。