0

从数据库中跟踪所有玩家之间的分数的最佳方法是什么?一个玩家与另一个玩家赢/输了多少次。

我想了一张duel表,我将有 3 列:duel_idwinner_idloser_id我相信有更好的方法来做到这一点,避免冗余。

编辑:我很抱歉不够清楚。玩家实际上是从桌子上随机挑选的user。我需要知道谁赢了谁输了谁。我不太喜欢我的解决方案的原因是因为在进行统计时,duel必须扫描整个表格才能返回两个玩家之间的赢/输数量。

4

2 回答 2

1

有自己的表id,两个外键 - player1_id,player2_id和两列 win wins_player1, wins_player2

--------------------------------
| id | p1_id | p2_id | w1 | w2 |
--------------------------------
| 1  |   1   |   2   |  2 |  0 |
--------------------------------
| 2  |   1   |   3   |  1 |  1 |
--------------------------------
| ...|       |       |    |    |
--------------------------------

这样,当两个玩家玩游戏时,您无需向表中插入新元组,您只需更新他们的分数。

例如,如果玩家 1 和 2 玩,玩家 1 赢了,你会这样做:

UPDATE scores WHERE p1_id = 1 AND p2_id = 2 SET w1 = w1 + 1;
于 2013-06-16T01:56:13.767 回答
0

如果您不介意不知道谁与谁决斗,您可以在您的用户数据表中放置一个 total_wins 列,并在每次比赛后为每个用户增加它。

它的优点是不占用太多空间。

但是如果你有一个相当大的应用程序,你的数据库可能会被这么多的查询和写入锁定

于 2013-06-16T01:54:56.437 回答