2017-04-09 13 views
0

これは多少はカバーされていますが、それは私の状況を助けませんでした、むしろランクに矛盾があります。もし誰かが手伝ってくれるのであれば不思議!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 

But it returns this: (click here) - names etc have been removed from the image as it may not be appropriate to display

user info - Score - (rank)82 
user info - Score - (rank)94 
user info - Score - (rank)115 
etc. 

私はこのように実装を想像しますランクが数(2と23)を逃す傾向があることが分かります。私はランク24のような何かがグループ化して(私はそのインスタンスで起こることを好む)を続けるだろうが、私は理解していないランクの一部が欠落していると本当にこの機能を処理して投稿したくない。

申し訳ありませんが、これは長いですが、私はIDができるだけ多くの情報を提供すると思いました。前もって感謝します!

+0

あなたの質問を編集して、サンプルデータと希望する結果を提供してください。 –

+0

これは、 'SELECT GROUP_CONCAT'サブクエリが" deleted "(' deleted is null')のエントリをフィルタリングしないためです。 –

+0

あなたは素晴らしいです。 実際には別のレコードが削除されていましたが、このテーブルからエントリをクリアしていませんでした。 ありがとうございます! – TheMellor

答えて

0

これは、SELECT GROUP_CONCATサブクエリが「削除済み」(削除済み)をフィルタリングしないためです。 - Paul Spiegel 9時間前

関連する問題