繁体   English   中英

PostgreSQL-随机顺序与不同

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

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