10

postgres データベースから行を取り出そうとしていますが、それらを desc から取り出せますが、ランダムにしようとするとランダムに近い構文エラーが発生します。

エラー

PG::Error: ERROR:  syntax error at or near "rand"
LINE 1: ...  "hashtags".* FROM "hashtags"  ORDER BY tweet_id rand LIMIT...
                                                             ^
: SELECT  "hashtags".* FROM "hashtags"  ORDER BY tweet_id rand LIMIT 4

引き出すコード

<div id="hashtags">
<% Hashtag.order("tweet_id desc").limit(4).each do |hashtag| %>
   <blockquote><%= hashtag.content %></blockquote>
   <div class="from">&mdash; @<%= hashtag.screen_name %></div>
 <% end %>
</div>
4

2 に答える 2

24

データベースからランダムなエントリを取得するには、いくつかのオプションがあります。ここにカップルがあります

最初のアプローチ

これにより、SQL を使用して DB から 4 つのランダムなエントリが取得されます。

Hashtag.order("RANDOM()").limit(4)

2番目のアプローチ:

ActiveRecord の sample() メソッドを使用して、4 つのランダムな行を取得することもできます。

Hashtag.all.sample(4)

速度と効率の点で; ミニベンチマークを作成し、自分のデータベース (500 レコードを含む) で 2 つのコマンドをテストしました。最初のアプローチは (予想どおり)、2 番目のアプローチよりも 2 倍以上高速でした。

SQL: 1.8ms
Sample Method: 4.2ms
于 2012-11-30T08:00:35.623 に答える