[英]PostgreSQL - Random order with Distinct on
我正在嘗試以隨機順序(或降序)退回產品,並有一個按鈕可以獲取不屬於先前隨機產品的更多隨機產品。 基本上,如果我總共有15個產品,我想要3個隨機產品,然后單擊按鈕並獲得3個隨機項目,依此類推,直到沒有更多項目為止。
我正在進行一個漂亮的查詢,以從表中獲取數據。
我正在使用“ DISTINCT on ”來獲得一種產品並顯示其最低價格(沒有價格,它將列出具有多種價格的產品)。 我知道這會影響隨機排序/降序排序。
SELECT DISTINCT on (products.id) products.*, prices.price FROM products
INNER JOIN product_price_size ON products.id = product_price_size.productId
INNER JOIN prices ON prices.id = product_price_size.priceId
WHERE active = true AND (archived IS NULL OR archived = false)
ORDER BY products.id, prices.price LIMIT 3
“獲取更多的產品”按鈕基本上是隨偏移距為LIMIT 3后的變量相同的查詢
希望這是有道理的。 有人對如何實現我想要獲得的想法有想法嗎?
謝謝!
您可以繼續增加穩定順序的偏移量。 一種排序可能基於諸如md5
類的確定性哈希(更改some_random_salt
為新的排序):
select id from tbl
order by md5(id || 'some_random_salt'), id
limit 3 offset ?
或素數的模(更改素數以不同的順序):
select id from tbl
order by id % 11, id
limit 3 offset ?
然后增加偏移量:
[...]
limit 3 offset 3
[...]
limit 3 offset 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.