Случайная сортировка с начальными значениями возвращает тот же набор снова, даже если некоторые строки удалены? - PullRequest
2 голосов
/ 18 июня 2019

Я пишу API разбиения на страницы, чтобы дать случайный результат, устанавливая случайное начальное значение если пользователь не хочет перемешать результат, результат будет таким же, но если пользователь захочет перемешать, я воссоздаю начальные значения, чтобы он возвращал другой набор записей.

Моя проблема здесь в том, что, если я удаляю запись из БД, даже если начальное число совпадает, результат будет другим из-за изменения длины элементов. Есть ли способ сделать его постоянным даже после удаления записи?

Пример запроса:

set seed to 0.1; select * from table order by random();

1 Ответ

2 голосов
/ 18 июня 2019

Я бы не заказывал по random(), потому что это не может контролироваться должным образом.

Если вам нужен надежный, но, казалось бы, случайный порядок, вы можете использовать хеш-функцию:

SELECT * FROM atable ORDER BY hashint4(id);

Это будет стабильно в течение DELETE с, потому что значения хеш-функции не меняются.

Если вам нужны разные «случайные» порядки, сгенерируйте случайное целое число повторяющимся образом и используйте

... ORDER BY hashint4(id + 42)
...