选择回答所有问题的用户

时间:2018-05-29 10:02:54

标签: mysql sql

我有这样的表格:

ANSWER

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,则表示用户没有回答。

在这里,弗兰克有一个非常相似的游戏(很明显,因为它是相同的,n°4)。

格雷格没有玩过类似的游戏,但在其他2个人的问题中回答了相同的问题,所以他出现在结果中。

杰克确实回答了其中一个问题(n°6),但没有回答另一个问题(n°9),所以杰克没有回答。

因此,结果仅包括那些回答与另一个游戏相同问题的人,无论是在类似游戏中还是在多个游戏中。

游戏是随机生成的。有时,用户可以回答他们已经遇到或/和回答的问题。 (和格雷格一样,在第一场和第二场比赛中)。

我尝试了很多疑问。如果你愿意,我可以发布它们。

感谢您的回答!

1 个答案:

答案 0 :(得分: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]