2011-01-17 10 views
1

ゲーム、スコア、オールタイムランク、ウィークリーランク、友達とのランクを表示できるグラフを表示する必要があります。
1)high_scores friendid(playerid、gameid、スコア、時間(タイムスタンプ))
2)友人(playerid、)遊んだゲームに基づいてプレイヤーのランクを計算する

は、私が使用して行うことができますどのように思っていました:

は、私は2つのテーブルを持っていますクエリの最小数。

私は自分のゲームサイトにPHP &を使用しています。

+2

いくつかの説明が必要です:各ゲームの後に、ゲームの得点と全日ランキングと週に表示される場所を表示することを意味しますか?週を定義すると、それは最後の7カレンダー日、最後の24x7時間、今週の月曜日以降などですか?友達とランク付け - これも週別に分けられますか?各友達の最高得点に基づいてユニークな友達のみを表示していますか? – RichardTheKiwi

答えて

0

すべてのリクエストではなく、データを1回計算します。

あなたは2つのソリューションを持っている:各挿入/更新/削除した後

  • のcron /非同期ジョブ
  • は、統計情報を再計算トリガ/
1

は次のようにそれのためにクエリを作るために管理することができ切り捨てます:

SELECT 
    gamescores.gameid, 
    COUNT(*)+1 AS rank, 
    playergamescores.total, 
    gamename, 
    foldername 
FROM (
    SELECT gameid, playerid, SUM(score) AS total, time 
    FROM high_scores 
    GROUP BY gameid, playerid 
    ORDER BY gameid, total DESC 
) AS gamescores 
INNER JOIN 
(
    SELECT gameid, SUM(score) AS total 
    FROM high_scores 
    WHERE playerid = 361822 
    GROUP BY gameid 
    ORDER BY total DESC 
) AS playergamescores 
ON playergamescores.gameid = gamescores.gameid 
INNER JOIN gamemaster 
ON gamescores.gameid = gamemaster.gameid 
WHERE gamescores.total > (
    SELECT SUM(score) AS total 
    FROM high_scores 
    WHERE gamescores.gameid = gameid 
    AND playerid = 361822      
) 
GROUP BY gamescores.gameid 
ORDER BY gamescores.time DESC 

とにかくお返事ありがとうございます... -Navi

関連する問題