Rails Postgresql随机排序

时间:2012-11-30 07:49:16

标签: ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-3.2

我正在尝试从postgres数据库中提取行,我可以将它们拉出来但是当我尝试随机时,我会在随机附近得到一个语法错误。

错误

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>

2 个答案:

答案 0 :(得分:19)

要从数据库中获取随机条目,您有几个选项。这是一对夫妇

第一种方法

这将使用SQL从您的数据库中删除4个随机条目。

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

第二种方法:

您还可以使用ActiveRecord sample()方法检索4个随机行。

Hashtag.all.sample(4)

速度和效率;我制作了一个迷你基准测试并在我自己的数据库上测试了两个命令(包含500条记录)。 第一种方法(如预期的那样)比第二种方法快两倍以上。

SQL: 1.8ms
Sample Method: 4.2ms

答案 1 :(得分:-1)

只想说。我试图使用postgres对我的条目进行洗牌,但找到了@instace.shuffle.each更好的帖子。