繁体   English   中英

Postgres从行中选择3个随机模型实例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM