ゲームのデータを追跡するテーブルがあります。テーブルの例を次に示します。
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つは上記のクエリを使用していましたが、毎日ループして最高の日を取り出していましたが、これはおそらくあまり効率的ではなく、これを行うより良い方法は?