1

編集:イアン&マークによって解決...

ゲームのハイスコアは、(php を使用して) MySQL データベースから取得する必要があります。私が使用するクエリは、時間の経過とともに常に増加する統計に対してうまく機能します。ただし、このクエリは、時間の経過とともに増減する可能性がある統計に対しては機能しません。

いくつかの詳細:

プレイヤーの統計はstatsテーブルに保存されます。プレーヤーごとに複数の行 (すべての更新)、auto_increment 列が主キーです。

CREATE TABLE IF NOT EXISTS `stats` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `stamp` bigint(20) NOT NULL,
    `username` varchar(255) NOT NULL,
    `kill` int(11) NOT NULL,
    `death` int(11) NOT NULL,
    `kdr` decimal(6,3) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=956 ;

いくつかのサンプルデータ:

1,  1365175892, user1,  1089,   191,    5.702
2,  1365175892, user2,  1805,   547,    6.709
3,  1365175892, user3,  104397, 2272,   45.949
4,  1365175892, user1,  1163,   200,    5.815
5,  1365175892, user2,  1090,   204,    5.343

Kills & Deaths は時間ごとに増加するため、トップ 10 を簡単に作成できます。

問題

Kill to Death Ratio (KDR) の値は、時間の経過とともに増減する可能性があります。例: 更新 5 の user2 の KDR は更新 2 よりも低いですが、それでも私のハイスコア リストには更新 2 の最高の KDR が示されていますが、実際には更新 5 のより低い KDR が必要です。

したがって、ここでは、トップ 10 について、Highest 値 (各プレイヤーに自動的に保存される最後の値) は必要ありませんが、LATEST 値 (必ずしも最高値であるとは限りません) が必要です。そして、私はそれを機能させることができません...

私が試したクエリの 1 つは、増加のみの統計に対して機能する次のクエリです。

SELECT s.*
FROM stats AS s
    INNER JOIN
    (
        SELECT username, MAX(kdr) AS kdr
        FROM stats
        GROUP BY username
    ) AS groupedstats
    ON s.username = groupedstats.username
    AND s.kdr = groupedstats.kdr
ORDER BY kdr DESC
LIMIT 10

正しいkdrハイスコアリストを取得する方法を誰か助けてもらえますか? 道に迷いました...

ありがとう

4

2 に答える 2