« 夏雲 | メイン | 夜明けの道路にて »
2012年8月29日
mysqlでスコアランキング 改題:Pear::MDB2 Mysqlの変数を扱う方法 >>Database | >>PHP
Pear::MDB2 Mysqlの変数を扱う方法にさらーっと記載していたのは、mysqlでのスコアランキングを返すDMLだったわけですが、mysqlの仕様的にまずそうです。
元の記載
※tableの定義次第でもあろうと思いますが。
そういうことで、こう書いた方が安全です。たぶん。
元の記載
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
トラックバック
現在、この記事はトラックバックを受け付けておりません。
コメント
現在、この記事はコメントを受け付けておりません。