PostgreSQL - 带有区别的随机顺序

时间:2018-05-27 02:49:18

标签: sql postgresql sql-order-by reverse

我正在尝试以随机顺序(或降序)返回产品,并且有一个按钮可以获得更多随机产品,这些产品不属于以前的随机产品。基本上如果我总共有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

“获取更多产品”按钮基本上是相同的查询, OFFSET LIMIT 3

之后的变量

希望这是有道理的。有没有人知道如何实现我想要的目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以继续增加稳定排序的偏移量。一个排序可能基于确定性哈希,例如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