我有这样的表格:
表答案
idAnswer idQuestion Status idGame
----------------------------------------
1 9 1 1
2 6 NULL 1
3 6 1 2
4 3 NULL 2
5 1 1 3
6 6 1 3
7 9 1 4
8 6 1 4
表格游戏:
idGame idUser
----------------
1 Greg
2 Greg
3 Jack
4 Frank
我只想得到那些回答了与游戏 n°4 相同问题的人,如下所示:
期望的结果:
idUser
-------
Greg
Frank
状态用于检查问题是否已得到解答。如果为NULL,则用户没有回答。
在这里,Frank 有一个非常相似的游戏(很明显,因为它是相同的,n°4)。
Greg 没有玩过类似的游戏,但在另外 2 个问题中回答了相同的问题,因此他出现在结果中。
jack 确实回答了其中一个问题 (n°6),但没有回答另一个问题 (n°9),因此 jack 没有出现。
因此,结果仅包括那些回答与另一游戏相同问题的人,无论是在类似游戏还是在多个游戏中。
游戏是随机生成的。有时,用户可以回答他们已经遇到或/和回答的问题。 (就像格雷格,在游戏 1 和 2 中)。
我尝试了很多查询。如果你愿意的话我可以发布它们。
感谢您的解答!
最佳答案
你可以试试这个:
SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idQuestion IN (9,6)
GROUP BY g.idUser
HAVING NumberOfAnswers = 2
如果用户无法在同一游戏中回答同一问题两次,并且您不介意向用户显示回答了更多问题的用户,我认为此解决方案符合您的要求。
编辑:
对于更通用的解决方案,您可以将查询调整为如下所示:
SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idCuestion IN (SELECT idQuestion FROM answer WHERE idGame=[DESIRED_GAME])
GROUP BY g.IdUser
HAVING NumberOfAnswers = (SELECT COUNT(*) FROM answer WHERE idGame = [DESIRED_GAME]
关于mysql - 选择回答了所有问题的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50581576/