0

ゲームのデータを追跡するテーブルがあります。テーブルの例を次に示します。

id | player_name | date                | score | kills
1  | test1       | 2013-01-01 00:00:00 | 10000 | 200
2  | test1       | 2013-01-01 00:01:00 | 12000 | 300

私はプレイヤーのためのリーダーボードを持っています。これは、特定の期間に最も多くのスコア/キルなどを獲得した人々をランク付けします. 現時点では、過去 24 時間のプレイヤーをランク付けするためだけに取得しています。指定された期間の最初と最後のレコードを選択し、それらを減算して差を取得することでこれを行っています。

これは私の現在のクエリです:

SELECT  date, score FROM datapoints WHERE player_name = :player AND date = (SELECT MIN(date) FROM datapoints WHERE player_name = :player AND date > DATE_SUB(CURDATE(), INTERVAL 24 HOUR))
UNION ALL 
SELECT date, score FROM datapoints WHERE player_name = :player AND date =  (SELECT MAX(date) FROM datapoints WHERE player_name = :player AND date > DATE_SUB(CURDATE(), INTERVAL 24 HOUR))

減算後、PHParsort()関数を使用してそれらを並べ替え、ページに表示します。

ただし、別の機能を追加したい。ユーザーのスコア/キルが最高の日だった日を確認できるようにしたいと考えています。

どうすればそれができるかを考えていました.1つは上記のクエリを使用していましたが、毎日ループして最高の日を取り出していましたが、これはおそらくあまり効率的ではなく、これを行うより良い方法は?

4

1 に答える 1

1

特定の暦日に発生するスコアの変化とキルを取得する方法は次のとおりです。

select date(date) as thedate, max(score) - min(score) as DayScore,
       max(kills) - min(kills) as DayKills
from datapoints dp
where player_name = :player
group by date(date);

たとえば、スコアのトップ日を取得するには、次のようにorder byandlimit句を追加します。

order by DayScore desc
limit 1;
于 2013-09-19T21:57:54.483 に答える