PostgreSQL - случайный порядок с определенным включением - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь вернуть товары в случайном порядке (или в порядке убывания) и имею кнопку, которая получает больше случайных товаров, которые НЕ являются частью предыдущих случайных товаров.В общем, если у меня всего 15 товаров, я хочу 3 случайных товара, затем нажимаю кнопку и получаю еще 3 случайных товара и так далее, пока не останется больше товаров.

У меня довольно странный запрос на получение данных из моих таблиц.

Я использую ' DISTINCT на ', чтобы получить один продукт и показать его наименьшую цену (без него он перечислит продукт по тем ценам, которые у него есть).Я знаю, что это влияет на случайный / нисходящий порядок.

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 является переменной после LIMIT3

Надеюсь, это имеет смысл.У кого-нибудь есть идеи о том, как добиться того, что я пытаюсь получить?

Спасибо!

1 Ответ

0 голосов
/ 27 мая 2018

Вы можете увеличивать смещение стабильного порядка.Один порядок может быть основан на детерминированном хэше, например 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
...