Php 基于特定条件分组datga的mysql查询

Php 基于特定条件分组datga的mysql查询,php,mysql,Php,Mysql,我正在做一个基于测验的项目,用户访问并进行测验。我想列出在5个模块测验中出现和失败的用户数量。我正在正确地理解这一点。现在,如果一个用户再次出现在5个测验中的任何一个测验中,并且通过了该测验,则他/她不得被包括在前面提到的计数中 我对5个模块中出现并失败的用户数的查询是 SELECT count(DISTINCT module_id) as module_id from tbl WHERE user_id = $userId AND cleared = 0, 其中user_id是用户的id,如

我正在做一个基于测验的项目,用户访问并进行测验。我想列出在5个模块测验中出现和失败的用户数量。我正在正确地理解这一点。现在,如果一个用户再次出现在5个测验中的任何一个测验中,并且通过了该测验,则他/她不得被包括在前面提到的计数中

我对5个模块中出现并失败的用户数的查询是

SELECT count(DISTINCT module_id) as module_id from tbl WHERE user_id = $userId AND cleared = 0,
其中user_id是用户的id,如果失败,则清除设置为0,如果通过,则清除设置为1。 尽管上面的查询统计用户通过的模块数。我在函数中使用它,然后在if语句中进行比较。
我只是想弄清楚我可以在这里引入哪些更改,这样如果用户传入任何模块,它们就不应该包含在这个模块中。我试过了,但没有得到正确的答案。任何建议都会有帮助

使用条件聚合:

SELECT user_id
FROM tbl
GROUP BY user_id
HAVING COUNT(DISTINCT module_id) = 5 AND SUM(cleared) = 0;
--             ^^ appeared in all 5 modules        ^^ and failed them all

如果要将上述查询限制为一个或几个用户,则可以添加WHERE子句。

谢谢。我感谢你的时间和努力。但是在查询中DISTINCT module_id=5的位置,我想通过调用DISTINCT module_id='this->totalmodules'这样的函数来获得5。这可能吗?如果没有,那么还能做些什么呢。TIA@Ansh我不太会写PHP,但是是的,这应该是可能的。从理论上讲,你可以把不同的计数与任何东西进行比较。