首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails 3:获取随机记录

Rails 3:获取随机记录
EN

Stack Overflow用户
提问于 2011-03-18 00:41:24
回答 11查看 67.6K关注 0票数 132

因此,我找到了几个在Rails 2中查找随机记录的示例--首选的方法似乎是:

代码语言:javascript
复制
Thing.find :first, :offset => rand(Thing.count)

作为一个新手,我不确定这是如何使用Rails3中新的find语法构建的。

那么,找到随机记录的“Rails3方法”是什么呢?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-03-18 00:45:08

代码语言:javascript
复制
Thing.first(:order => "RANDOM()") # For MySQL :order => "RAND()", - thanx, @DanSingerman
# Rails 3
Thing.order("RANDOM()").first

代码语言:javascript
复制
Thing.first(:offset => rand(Thing.count))
# Rails 3
Thing.offset(rand(Thing.count)).first

实际上,在Rails3中,所有示例都可以工作。但是对于大表来说,使用order RANDOM的速度很慢,但更像是sql风格的。

UPD。您可以对索引列使用以下技巧(PostgreSQL语法):

代码语言:javascript
复制
select * 
from my_table 
where id >= trunc(
  random() * (select max(id) from my_table) + 1
) 
order by id 
limit 1;
票数 215
EN

Stack Overflow用户

发布于 2015-06-02 18:33:15

如果使用Postgres

代码语言:javascript
复制
User.limit(5).order("RANDOM()")

如果使用MySQL

代码语言:javascript
复制
User.limit(5).order("RAND()")

在这两个实例中,您都从Users表中随机选择了5条记录。以下是控制台中显示的实际SQL查询。

代码语言:javascript
复制
SELECT * FROM users ORDER BY RANDOM() LIMIT 5
票数 12
EN

Stack Overflow用户

发布于 2011-08-17 21:51:58

为此,我做了一个Rails3gem,它在大型表上执行得更好,并允许您链接关系和作用域:

https://github.com/spilliton/randumb

(编辑):我的gem的默认行为基本上使用与上面相同的方法,但如果您愿意,您可以选择使用旧方法:)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5342270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档