score毎にレコード付与を行いたい場合には以下SQLで対応可能
## ランキング付与(同率は未対応) SET @rownum=0; SELECT @rownum:=@rownum+1 AS ROW_NUM , score , userid FROM ranking_tbl ORDER BY score desc ;
同率順位があった場合は、mysql内のソート順に連番が増えていく為、正しい値にはならないが、処理が高速な為、
同率が少ない場合、同率が同じ順位にならなくても気にならない場合は推奨。
## ランキング付与(同率対応版) SELECT r1.userid , r1.score , ( SELECT count(r2.score) FROM ranking_tbl AS r2 WHERE r2.score > r1.score ) + 1 AS rank FROM ranking_tbl AS r1 ORDER BY r1.score DESC ;
同率順位があった場合は、同率で表す事が出来るが、テーブルのレコード量が多いと、
処理が重くなってくるので、同率未対応の処理とは要件によって取捨選択する形になるパターンが多いと思われます。