1

これが基本的に私がやりたいことです。ビデオ ゲームでハイスコアを獲得した人々をランク付けする Web サイトを構築しているとします。あなたには 1 人のユーザーがいて、レベル 1、2、3 でそれぞれ 100、150、200 点を獲得しています。次に、スコアが 200、100、および 100 の別のユーザーがいます。ユーザー 1 を見ている場合、次のようなテーブルが得られます。

         | | スコア | ランク |
レベル 1: | 100 | 2 |
レベル 2: | 150 | 1 |
レベル 3: | 200 | 1 |

スコアをMySQLテーブルに保存してからデータをランク付けする方法はすでにわかっています。ここが少しややこしいところです。ユーザーのすべてのランキングを平均化するとします。ユーザー 1 の場合、1.333 になります。ユーザー 2 の場合、1.666 になります。そのデータをランク付けすると、次のような表が得られます。

        | | 平均ランク | ランク |
ユーザー 1: | 1.333 | 1 |
ユーザー 2: | 1.666 | 2 |

基本的に、これを行うための最良の方法は何ですか?

4

3 に答える 3

0

最も効率的な方法は、データを取得するときに MySQL クエリで集計関数を使用することです。

http://www.mysqltutorial.org/mysql-aggregate-functions.aspx

于 2012-08-22T00:42:57.483 に答える
0
 "SELECT level, AVG(Rank) FROM (YOUR TABLE NAME HERE) GROUP BY level"

1 つのテーブルのランク列の平均が得られます。各テーブルがプレイヤーを表すと仮定しています。その場合は、各ユーザー テーブルでこのクエリを実行する必要があります。また、レベル 1 ~ レベル 3 が一意の ID であると仮定しています。

于 2012-08-22T00:47:52.740 に答える
0

さて、あなたのテーブルが似ていると仮定すると

LevelID (int)
UserID (int)
Score (int)

あなたはおそらく次のようなことをするでしょう

SET @rank = 0;
SELECT *, AVG(Score) as AverageScore, @row_num := @row_num + 1 as Rank FROM scores
GROUP BY UserID
ORDER BY `AverageScore` DESC

平均ランクの代わりに平均スコアとランクを使用した理由は、平均ランクを使用するのは誰ですか? それは奇妙で、計算するのが難しいです。ランクを取得するための SQL を表示すると、簡単になります。実際にランクをテーブルに保存している場合 (これは良い方法ではありません)、UserID と AVG(Rank) で並べ替えることができます。

于 2012-08-22T00:51:42.067 に答える