从数据库中跟踪所有玩家之间的分数的最佳方法是什么?一个玩家与另一个玩家赢/输了多少次。
我想了一张duel
表,我将有 3 列:duel_id
,winner_id
但loser_id
我相信有更好的方法来做到这一点,避免冗余。
编辑:我很抱歉不够清楚。玩家实际上是从桌子上随机挑选的user
。我需要知道谁赢了谁输了谁。我不太喜欢我的解决方案的原因是因为在进行统计时,duel
必须扫描整个表格才能返回两个玩家之间的赢/输数量。
从数据库中跟踪所有玩家之间的分数的最佳方法是什么?一个玩家与另一个玩家赢/输了多少次。
我想了一张duel
表,我将有 3 列:duel_id
,winner_id
但loser_id
我相信有更好的方法来做到这一点,避免冗余。
编辑:我很抱歉不够清楚。玩家实际上是从桌子上随机挑选的user
。我需要知道谁赢了谁输了谁。我不太喜欢我的解决方案的原因是因为在进行统计时,duel
必须扫描整个表格才能返回两个玩家之间的赢/输数量。
有自己的表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;
如果您不介意不知道谁与谁决斗,您可以在您的用户数据表中放置一个 total_wins 列,并在每次比赛后为每个用户增加它。
它的优点是不占用太多空间。
但是如果你有一个相当大的应用程序,你的数据库可能会被这么多的查询和写入锁定