« 夏雲 | メイン | 夜明けの道路にて »

2012年8月29日

mysqlでスコアランキング 改題:Pear::MDB2 Mysqlの変数を扱う方法 >>Database  | >>PHP 

Pear::MDB2 Mysqlの変数を扱う方法にさらーっと記載していたのは、mysqlでのスコアランキングを返すDMLだったわけですが、mysqlの仕様的にまずそうです。
元の記載
SET @R:=0 , @preval = null;
SELECT
    nantoka,
    @R:=IF(@preval <=> score, @R, @R + 1) AS rank,
    @preval:=score score
    FROM rr
where rr_id = ?
order by score DESC
何がまずいかっていうと、scoreでソートを「最後にかけている」点です。 ソートをかけてから変数値をつけてあげないと、ランキングの先頭が0になったりします。
※tableの定義次第でもあろうと思いますが。

そういうことで、こう書いた方が安全です。たぶん。
SET @R:=0 , @preval = null;
SELECT
    rd.nantoka,
    @R:=IF(@preval <=> score, @R, @R + 1) AS rank,
    @preval:=score score
    FROM (select nantoka,score from rr where rr_id = ? order by score DESC) as rd
twitterこの記事をTwitterでみんなに教える。

投稿者 debizoh : 2012年8月29日 11:31



トラックバック

現在、この記事はトラックバックを受け付けておりません。


コメント

現在、この記事はコメントを受け付けておりません。