【发布时间】:2011-02-14 16:26:26
【问题描述】:
我需要通过 ActiveRecord 从表中获取随机记录。我已经按照Jamis Buck from 2006 中的示例进行了操作。
不过,我还通过 Google 搜索发现了另一种方式(由于新的用户限制,无法使用链接进行归因):
rand_id = rand(Model.count)
rand_record = Model.first(:conditions => ["id >= ?", rand_id])
我很好奇这里的其他人是如何做到的,或者是否有人知道哪种方式更有效。
【问题讨论】:
-
2 点可能有助于回答。 1. 你的 id 分布有多均匀,它们是连续的吗? 2. 它需要有多随机?足够好的随机,还是真正的随机?
-
它们是由 activerecord 自动生成的顺序 ID,它必须足够好。
-
那么您提出的解决方案接近理想:) 我会使用“SELECT MAX(id) FROM table_name”而不是 COUNT(*),因为它会更好地处理已删除的行,否则,其余的都很好。简而言之,如果“足够好”是可以的,那么你只需要一种方法来假设分布接近你实际拥有的分布。如果它是统一的,甚至如你所说,简单的 rand 效果很好。
-
当您删除了行时,这将不起作用。
标签: ruby-on-rails random rails-activerecord