mysql选择具有最小记录集数量的组

时间:2014-05-13 09:34:42

标签: php mysql select

我不确定这是否适用于单个mysql语句,但这正是我想要实现的目标:

我们正在 tbl_results 中为可变数量的在线报价存储用户的答案。每个在线测验都有不同数量的问题。每个问题都有可变数量的答案,其中只有一个是正确的。

这是我们的 tbl_results ,其中包含一些示例条目

id | quiz_id | user_id | question_id | answer_id | correct
1    2         3         1             1           0
2    2         3         2             2           1
3    2         3         3             3           1

4    2         4         1             1           1
5    2         4         2             2           1
6    2         4         3             3           1

7    2         5         1             1           1
8    2         5         2             2           1
9    2         5         3             3           1

10   2         6         1             1           1
11   2         6         2             2           1

$number_of_questions告诉我们为了赢得目前有关的测验,必须正确回答多少问题。

我们如何在$number_of_questions = 3时找出有多少用户赢得了第2个测验?在这种情况下,它将是user_ids 4& 5。

这是我们到目前为止所做的:

SELECT * FROM tbl_results WHERE quiz_id = 2 AND CORRECT = 1 GROUP BY user_id

我们如何调整这一点以考虑$number_of_questions ...?

非常感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用HAVING子句: -

SELECT quiz_id, user_id, correct, COUNT(*) AS correct_answers
FROM tbl_results 
WHERE quiz_id = 2 
AND CORRECT = 1 
GROUP BY quiz_id, user_id, correct
HAVING correct_answers = 3

请注意,原始查询中的GROUP BY有点可疑,并且对于不在GROUP BY子句中的列返回哪些行值是未定义的。