0

データベースからすべてのプレーヤー間のスコアを追跡する最良の方法は何ですか? プレーヤーが別のプレーヤーに対して勝った/負けた回数。

duel私は 3 つの列を持つテーブルについて考えました: duel_id、しかしwinner_idloser_id冗長性を避けて、これを行うためのより良い方法があると思います。

編集:十分に明確でなくて申し訳ありません。実際、プレイヤーはuserテーブルからランダムに選ばれます。誰が誰に勝った/負けたのかを知る必要があります。そして、私が自分のソリューションをあまり好きではない理由は、統計を行うときに、duel2 人のプレイヤー間の勝ち/負けの量を返すために、テーブル全体をスキャンする必要があるからです。

4

2 に答える 2

1

Table with its own id, two foreign keys - player1_id, player2_id, and two columns for wins wins_player1, wins_player2.

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

This way, when two players play a game you don't insert a new tuple to the table, you just update their scores.

For an example, if players 1 and 2 played, and the player 1 won you would do:

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

If you don´t mind not knowing who dueled with whom, you can put a total_wins column in your user data table, and increment it for each user after each match.

It has the advantage of not taking too much space.

But if you have a pretty big applications your data base could lock up with so many querys and writes

于 2013-06-16T01:54:56.437 に答える