我有这样的表格:
表 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),所以杰克没有回答。
因此,结果仅包括那些回答与另一个游戏相同问题的人,无论是在类似游戏中还是在多个游戏中。
游戏是随机生成的。有时,用户可以回答他们已经遇到或/和回答的问题。 (和格雷格一样,在第一场和第二场比赛中)。
我尝试了很多疑问。如果你愿意,我可以发布它们。
感谢您的回答!
答案 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]