首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ActiveRecord中的随机记录

ActiveRecord中的随机记录
EN

Stack Overflow用户
提问于 2010-05-02 10:11:53
回答 18查看 102.9K关注 0票数 168

我需要通过ActiveRecord从表中获取随机记录。我遵循了Jamis Buck from 2006中的示例。

然而,我也通过谷歌搜索遇到了另一种方式(由于新的用户限制,无法使用链接):

代码语言:javascript
复制
 rand_id = rand(Model.count)
 rand_record = Model.first(:conditions => ["id >= ?", rand_id])

我很好奇这里的其他人是如何做到的,或者是否有人知道什么方法会更有效。

EN

回答 18

Stack Overflow用户

发布于 2010-05-02 10:40:45

一旦记录被删除,你的示例代码将开始表现不准确(它将不公平地偏爱ids较低的项)

在数据库中使用随机方法可能会更好。根据您使用的数据库不同,它们会有所不同,但是:order => "RAND()“适用于mysql,order => "RANDOM()”适用于postgres

代码语言:javascript
复制
Model.first(:order => "RANDOM()") # postgres example
票数 73
EN

Stack Overflow用户

发布于 2013-08-20 02:42:55

这并不需要那么难。

代码语言:javascript
复制
ids = Model.pluck(:id)
random_model = Model.find(ids.sample)

pluck返回表中所有id的数组。数组上的sample方法返回数组中的随机id。

这应该表现良好,具有相同的选择概率和对删除行的表的支持。您甚至可以将其与约束相混合。

代码语言:javascript
复制
User.where(favorite_day: "Friday").pluck(:id)

从而随机选择一个喜欢星期五的用户,而不是任何一个用户。

票数 18
EN

Stack Overflow用户

发布于 2011-08-17 21:43:23

我做了一个rails 3 gem来处理这个问题:

https://github.com/spilliton/randumb

它可以让你做这样的事情:

代码语言:javascript
复制
Model.where(:column => "value").random(10)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2752231

复制
相关文章

相似问题

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