これは多少はカバーされていますが、それは私の状況を助けませんでした、むしろランクに矛盾があります。もし誰かが手伝ってくれるのであれば不思議!MySQLランク、正常に動作しない
だから私はゲームを持って、データベース・テーブルは以下のとおりです。 ユーザー、マップ、ニックネーム、user_game_scores
イムは、リーダーボードを開発し、簡単にスコアが発注情報を取得することができ。素晴らしい。
しかし、私は特定のユーザーの得点とランクをすべての得点に関連付けることができるようにこれをランクしたいと思います。例えば:
GLOBAL得点
user info - Score - (rank)1
user info - Score - (rank)2
user info - Score - (rank)3
etc.
USERスコアがある可能性が高いのに対し:あなたのよう
SELECT users.first_name, users.surname, player_nicknames.nickname, maps.map_name, user_game_scores.score,
FIND_IN_SET(score, (SELECT GROUP_CONCAT(score ORDER BY score DESC) FROM user_game_scores)) AS rank
FROM `user_game_scores`
INNER JOIN users ON user_game_scores.user_id = users.user_id
INNER JOIN maps ON user_game_scores.map_id = maps.map_id
INNER JOIN player_nicknames ON user_game_scores.user_id = player_nicknames.user_id
WHERE user_game_scores.deleted is null
AND users.deleted is null
AND player_nicknames.deleted is null
ORDER BY user_game_scores.score DESC
user info - Score - (rank)82
user info - Score - (rank)94
user info - Score - (rank)115
etc.
私はこのように実装を想像しますランクが数(2と23)を逃す傾向があることが分かります。私はランク24のような何かがグループ化して(私はそのインスタンスで起こることを好む)を続けるだろうが、私は理解していないランクの一部が欠落していると本当にこの機能を処理して投稿したくない。
申し訳ありませんが、これは長いですが、私はIDができるだけ多くの情報を提供すると思いました。前もって感謝します!
あなたの質問を編集して、サンプルデータと希望する結果を提供してください。 –
これは、 'SELECT GROUP_CONCAT'サブクエリが" deleted "(' deleted is null')のエントリをフィルタリングしないためです。 –
あなたは素晴らしいです。 実際には別のレコードが削除されていましたが、このテーブルからエントリをクリアしていませんでした。 ありがとうございます! – TheMellor