2017-04-18 19 views
0

多くのプレイヤーが多くのゲームを何度もプレイできるマルチゲームトーナメントのスコアボードを構築しています。私は各ゲームのランクに基づいて、実際のスコアではなく、ゲームごとにプレーヤーにポイントを割り当てたいと思う。複数のゲームのプレイヤーにランクごとにランクを割り当てる

ドンキーコング

Rank | Player | Score | Points Awarded  
1 | Player2 | 34,000 | 1,000  
2 | Player1 | 32,000 | 999  
3 | Player3 | 29,000 | 998 

Robotron

Rank | Player | Score | Points Awarded  
1 | Player1 | 39,000 | 1,000  
2 | Player3 | 32,000 | 999  
3 | Player2 | 21,000 | 998 

トーナメント順位ので

Player1 - 1,999 Points 

Player2 - 1,998 Points 

Player3 - 1,997 Points 

これまで私は、ランク付けしているとの点の計算がうまく働いて...

SELECT 
    `id`, 
    `userID`, 
    `gameID`, 
    `gamescore`, 
    `rank`, 
    1001.0 - (rank) AS points 
FROM (
    SELECT 
     `id`, 
     `userID`, 
     `gameID`, 
     `gamescore`, 
     @curr_rank := IF(@prev_rank = id, @curr_rank, @curr_rank + 1) AS rank, 
     @prev_rank := id 
    FROM 
     `submit_score`, 
     (SELECT @curr_rank := 0) y, 
     (SELECT @prev_rank := NULL) z 
    WHERE `submit_score`.`tournID` = 2 
    ORDER BY `gamescore` DESC 
) ranked_game; 

しかし、私は、ランクごとのゲームでポイントを割り当てることができるようにする必要がありますし、その私ができる各プレイヤーのためのポイントの総計を持っていますリストに表示されます。

+0

まず別々のデータを指します。二番目に与えられたポイントは、常に1位から1位まで同じになるでしょうか?そのビジネスロジックをコードに移しているのですか? – JackTheKnife

+0

はいポイントは常にランクごとに同じです –

+0

OK - これは冗長なので、DBからそのデータを移動します(ゲームごとのランクも同じです)。次に、各ゲームの配列(ハッシュマップ)を、キーがランク番号で値が配列になるスコア列(「ランク1」などの最高得点を与える)に並べ替え、「desc」を付けたクエリから作成しますプレイヤーIDとスコアのリスト)。そのような配列をループすると、プレイヤーIDを持つ一時変数(または配列)を作成し、それらに賞ポイントを割り当てることができます。最後に、各プレイヤーIDの合計ポイントで終了する必要があります。 – JackTheKnife

答えて

0

あなたのDBは

プレーヤー

ID | Player Nickname 
1 | Player1 
2 | Player2 
3 | Player3 

ドンキーコング

PlayerID | Score 
Player2ID | 34,000 
Player1ID | 32,000 
Player3ID | 29,000 

Robotron

ような何かを探すようにすべき
PlayerID | Score 
Player1ID | 39,000 
Player3ID | 32,000 
Player2ID | 21,000 

DBはデータの格納にのみ使用する必要があります。ランクと授与されたポイントは、冗長なパートであるため、コードに移動する必要があります。

次に、スコア表のdescソートで各表を照会します。それはトップスコアラーが#1などでランク付けされたテーブルを作成します。キーはランク#(1+インクリメンタル)になり、値はストアドプレイヤーデータで他の配列になることができるキー - >値で各ゲームの配列にデータストアを取得します参加した後)やスコアやPlayerXのような文字列|スコア#実際には、プレイヤーのデータのみがゲームごとのスコアでソートされるため、何かのスコアデータが必要な場合。

その後、プレーヤーテーブルをループし、各ゲーム配列のループから取り出されたトーナメントポイントを保存し、各ランクのトーナメントポイントを減らし、適切なプレーヤーに割り当てるプレーヤの配列を作成する必要があります。

は、それが

PSに役立ちます願っています。私はすべてのトーナメントを合計し、最終的な表示を行うその後、各ゲームのためのビューに

set @max_points=1000; 
select Rank, Player, 
@current_points := IF(Rank = 1, @max_points, @current_points-1) AS points 
from DonkeyKong 

のようなものを作成する、既存のデータについては は関係から

select dk.Player AS Player,(dk.Points + ro.Points) AS Total 
from RO_view AS ro 
left join DK_view AS dk 
on dk.Player = ro.Player 
+0

残念ながら私は、他の多くのプロセスがsubmit_scoreテーブルから引き出すのと同じくらい、構造変更のレベルを作ることができる場所ではない –

+0

@ Joel'Maximus'GriffinDodd各ゲームごとにビューを作成して最終的なビューを作成する総額完璧ではありませんが、あなたの既存のデータで作業する必要があります – JackTheKnife

+0

問題は、私は5000以上のゲームタイトルを持っており、各ゲームインスタンスのテーブルを持っている世界中の場所で、実用的ではない。 –

関連する問題