0

ゲームを作成している間、トップ 10 を取得するための MySQL 呼び出しは次のとおりです。

SELECT username, score FROM userinfo ORDER BY score DESC LIMIT 10

これは十分に機能しているように見えますが、個々のプレーヤーのランクを取得するための呼び出しと組み合わせると、プレーヤーが他のプレーヤーと同点のスコアを持っている場合、数値が異なる場合があります。プレイヤーのランクを取得するための呼び出しは次のとおりです。

SELECT (SELECT COUNT(*) FROM userinfo ui WHERE (ui.score, ui.username) >= (uo.score, uo.username)) AS rank FROM userinfo uo WHERE username='boddie';

最初の呼び出しの結果の例:

+------------+-------+
| username   | score |
+------------+-------+
| admin      |  4878 |
| test3      |  3456 |
| char       |   785 |
| test2      |   456 |
| test1      |   253 |
| test4      |    78 |
| test7      |     0 |
| boddie     |     0 |
| Lz         |     0 |
| char1      |     0 |
+------------+-------+

2 回目の呼び出しの結果の例

+------+
| rank |
+------+
|   10 |
+------+

ご覧のとおり、最初の呼び出しではプレーヤーがリストの 8 位にランク付けされていますが、2 回目の呼び出しではプレーヤーが 10 位にランク付けされています。

助けてくれてありがとう!

4

5 に答える 5