我正在尝试从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">— @<%= hashtag.screen_name %></div>
<% end %>
</div>
答案 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
更好的帖子。