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 从您的数据库中取出 4 个随机条目。

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

第二种方法:

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

Hashtag.all.sample(4)

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

SQL: 1.8ms
Sample Method: 4.2ms
于 2012-11-30T08:00:35.623 回答
0

只想说。我试图使用 postgres 对我的条目进行洗牌,但发现一个帖子@instace.shuffle.each做得更好。

于 2013-11-11T18:59:01.680 回答