[英]Postgres select 3 random model instances from row?
在我的Rails应用程序中,我想选择一个模型的三个随机实例,并将其呈现在页面上。 Model.order('RANDOM()').limit(3)
可以工作,但是显然一旦数据库表中有很多数据,它将严重影响加载时间,因此我正在寻找可以在不只是发展。
现在是我的Rails视图中的行:
<% featured = Product.order('RANDOM()').limit(3).where.not(photo_file_name: nil, sold_value: true) %>
您可以通过多种方式来做到这一点。 哪种方法最好取决于您的设置,产品数量等。
ids = Product.pluck(:id).shuffle.slice(0,3)
featured = Product.where(id: ids)
只有两个查询,但是如果您有一百万种产品,那么在Ruby中返回和洗牌将有很多。 同样,在进行第二次通话之前,可以删除所选ID之一的小比赛条件。
total = Product.count
featured = 3.times.map { Product.offset(rand(total).first }
四个查询,但最后三个查询有效。 我的语法可能关闭,并且那里可能有一个错误的错误,因此请仔细检查rand(total)
返回零或total
时会发生什么。 同样,对于某些数据库, Product.count
可能确实效率低下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.