所以这里有一点关于系统的背景知识。用户的战斗和胜利者是赢得最多轮次的人。我需要帮助可能加入三张桌子。我有表user
之一,它存储用户信息。表match
存储匹配信息。表rounds
其中每场比赛存储每场比赛的胜者,所以如果一场比赛有5场比赛,那么表rounds
将有五场比赛并记录每场比赛的胜者。需要复杂查询的指导
下面是一些示例数据: 表user
: (userid
是主键)
userid username
-----------------
1 Kevin
2 Sam
3 Steve
4 Matt
表match
: (id
是主键challenger
和challenged
均为外键user.userid
。)
id challenger challenged rounds
-----------------------------------
1 2 3 3
2 1 2 1
3 2 3 3
4 2 4 1
表rounds
: (所有字段都是主键。 id
是外键match.id
和winner
是外键user.userid
)
id round winner
------------------
1 1 2
1 2 2
1 3 3
2 1 1
3 1 2
3 2 3
3 3 2
4 1 4
我试图建立一个查询,将输出下面的结果:
winner won loser won
------------------------
Sam 2 Steve 1
Kevin 1 Sam 0
Sam 2 Steve 1
Matt 1 Sam 0
上述结果显示赢家每场比赛的失败者。 won
字段显示分别获胜者和失败者获胜的比赛数。
有谁知道我可以如何建立上述查询?
而且,这里重要的是,我认为,如果他们配合会发生什么?或者我们可以假设总会有奇数轮次? – Compeek 2011-12-28 07:58:26
是的,总是有一个奇数 – user962449 2011-12-28 08:13:27
我认为你应该考虑在他们发生时确定胜利并将结果存储在每场比赛的排中。因此,添加另一个字段以匹配被叫方赢家,并在匹配结束后尽快填入用户的ID。与通过巨大的查询来计算胜利相比,您可以节省大量开销,就像在每次您需要结果时看到的一些答案中一样。另外,这种方式更简单。如果这对您的项目是可行的,我觉得这是一个更好的方法。 – Compeek 2011-12-28 16:32:47