簡體   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