2010年06月24日

Ruby on Rails with DB ランダム検索

ランダム検索とは?


まぁ言うまでもなくランダムに値を取ってくる事ですね。
前まではrand()を使用していました。
DBを使用しないランダムはこれでいいのですが、
これを知らなかったばっかりにDB検索でもrand()を使用していました。。。

環境


rails1.2.6
app/controllers/hoges_controllers.rb

rand()


まず以前の方法から、
・あるテーブルの全レコードからランダムで1件抜き出して表示したい。
$ vi hoges_controllers.rb
def hoge
 @hoges = Hoge.find(:all)
 random = @hoges[rand(@hoges.length)]
end

全部取り出してからわざわざ1件とりだすとか面倒な上に
レコードの数が増えれば増える程遅くなる訳ですよ。

RANDOM()、RAND()


はてさて、これを使用すると、
$ vi hoges_controllers.rb
def hoge
 @hoges = Hoge.find(:all, :order => 'RANDOM()', :limit => 1)
end

はい!これで終了!!
1行じゃん!全部取り出す必要ないじゃん!!!ってなわけです。
しかも、
$ vi hoges_controllers.rb
def hoge(limit = 1)
 @hoges = Hoge.find(:all, :order => 'RANDOM()', :limit => limit)
end

引数にリミットを付ける事でランダムで取り出せる数を簡単に決める事ができます。
いや〜すばらしいですね。。

あ、なんでRANDOM()とRAND()があるかというと
PostgreSQLはRANDOM()で
MySQLはRAND()なのでご注意を。

・・・もちょっとDBの勉強しなきゃだなぁ。。
posted by RicK at 17:56| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/39140784

この記事へのトラックバック