Предсказуемый случайный порядок MySQL - PullRequest
0 голосов
/ 24 сентября 2018

Я очень удивлен, что не могу понять это.

В настоящее время я вывожу таблицу из MySQL в несколько случайном порядке.Я говорю несколько, потому что есть формула, которая частично зависит от RAND ().В любом случае, мы можем предположить, что порядок фактически является случайным для моего вопроса.

Все это работало замечательно, за исключением того, что я хочу сохранить тот же порядок для "сеанса".Я не хочу, чтобы он продолжал прыгать, активно используя данные.Я пытался выяснить, как заставить MySQL генерировать ту же последовательность во второй раз.

Я знаю, что вы можете выполнить RAND (N), где N - начальное число, но насколько я могу судить, этобыть точно таким же числом каждый раз.Так что, в принципе, случайного фактора вообще не будет, если я его использую.

Мне бы хотелось, чтобы я мог подавать семя в свой ORDER BY и всегда получать надежный выходной порядок.Для того же семени я получу тот же заказ, и если я буду кормить другим семенем, это будет другой случайный порядок.

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

  • Дополнительная база данных используется в базе данных.
  • Она не работает для нескольких пользователей, потому что мне нужен отдельный столбец для каждого пользователя.

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

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я настоятельно рекомендую вам использовать один из столбцов для генерации числа:

select t.*
from t
order by rand(t.id);

Это предполагает, что id является целым числом.Вы можете получить другой порядок, отрегулировав семя, скажем, rand(t.id + 1).

0 голосов
/ 24 сентября 2018

Как вы упомянули, вы можете предоставить начальное число для генерации последовательности случайных чисел.Алгоритм генерации случайных чисел возвращает одинаковую последовательность чисел для одного и того же начального числа.Например;

SELECT Rand(1) AS rnd, CustomerId, CustomerName FROM Customers ORDER BY rnd

Делая так, вы всегда будете иметь одинаковый случайный порядок для начального числа "1".Вы можете предоставить идентификатор сеанса или аналогичный номер, чтобы получить тот же результат.

Надеюсь, это поможет.

...