ゲームを作成している間、トップ 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 位にランク付けされています。
助けてくれてありがとう!