Mysql で、ランダムにレコードを取り出す方法
ActiveRecordで、テーブルからランダムにレコードを取り出すときは、
user = User.find(:first, :order => "RAND()")
みたいにすればいい。SQLは
select * from users order by RAND() limit 1;
というような感じになる。
ただし、レコード数が大きくなると、この order by RAND() がかなり遅くなってしまう。そのときは、ランダムなid値をアプリ側で用意して、
user = User.find(:first, :conditions => ["id = ?", rand_id])
みたいにするといい感じ。
また、selectで取り出すカラムを最小限に抑えると、結構はやくなったりするので、アプリの修正が面倒なときはこれを試してみてもいいかも。
user = User.find(:first, :select => "id", :order => "RAND()")