MySQLで順位取得を行う

とある投票システムで、登録者毎の順位取得を行う必要があったので作業をしました。

アルゴリズムというか、考え方では有るのですがメモ書きとして残しておきます。

とはいえ方法は案外簡単で、自己結合を行い「自分より上位の行数+1」をすることで順位は取得できます。

SELECT (SELECT COUNT(*)
FROM ex_table AS b
WHERE a.vote < b.vote) + 1 AS rank
FROM ex_table AS a
WHERE id = xxx
ORDER BY a.vote DESC;

例としてはこんな感じ。
ex_tableには、id列とvote列があるものとします。
この例ではid = xxxのものを取得しています。

この記事を書いた人

Shizumi

熊本在住のWebプログラマ。熊本WordPressMeetupのオーガナイザー。WordPressを使い始めたのは2012年頃から。