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