ユーザーデータを集計して、ランキングを取りたかった時のお話し。
userテーブルのcountカラムを集計して、rankテーブルにデータを登録(UPDATE)するsqlです。
---- 上のデータをrankテーブルにアップデート UPDATE ( db.rank r left join( SELECT r1.uid, r1.count, COUNT( r2.uid ) +1 as rank FROM (SELECT uid, count FROM user) AS r1 LEFT JOIN (SELECT uid, count FROM user) AS r2 ON r1.count < r2.count GROUP BY r1.uid ) b on r.uid = b.uid ) SET r.battle = b.rank;
こういうsql作ってると、Mysqlって不便な事がまだまだありますね。
oracleならもーちっと楽ちんだった気が、、、
たしか、「rank() over(order by count)」で順位付けできたです。
あと、UPDATE文の構造も話をややこしくしていると思う。
http://dev.mysql.com/doc/refman/4.1/ja/update.html
この構造は僕の頭には負荷が高すぎるorz