特定のレコードが、テーブルをある条件でソートした後に先頭から何番目にあるか、を知るにはどうするか?
そのレコードより前に位置するレコードを数えればよい
たとえば、生徒名簿にテスト得点が記録されているとして、鈴木太郎のテスト順位(得点の高い順)は何番か?
1 |
SELECT *,(SELECT COUNT(*)+1 FROM `クラス名簿` B WHERE B.得点 > A.得点) AS `順位` FROM `クラス名簿` A WHERE `名前` = '鈴木太郎'; |
たとえば、商品一覧に発売日が記録されているとして、商品Aは何番目(発売日の古い順)に発売したか?
1 |
SELECT *,(SELECT COUNT(*)+1 FROM `商品一覧` B WHERE B.発売日 < A.発売日) AS `順位` FROM `商品一覧` A WHERE `商品名` = '商品A'; |
面倒なのは上に示したように、レコードから順位を逆引きしたい場合だけ。順位からレコードを取得するテーブルの順引きは簡単。普通にテーブルをソートしてLIMITで順位をオフセットとして与えてやれば済む。
やりたいことはできたけど、処理時間に関しては考察が必要かもしれない。
参考サイト
MySQLでソート後の順位を取得する方法を教えて下さい。 例えば、.. – 人力検索はてな
http://q.hatena.ne.jp/1336143424