Я предполагаю, что вы используете ORDER BY RAND()
в своем SQL для получения случайного порядка. Если да, то вы можете предоставить начальное число для генератора случайных чисел :
RAND(), RAND(N)
[...] Если задан постоянный целочисленный аргумент N , он используется в качестве начального значения, которое создает повторяющуюся последовательность значений столбца.
Так что вам просто нужно выбрать начальное число (возможно, даже используя seed = rand(1e6)
или что-то подобное в вашем коде Ruby) и отследить это начальное значение в сеансе. Затем для следующей страницы вытащите начальное значение из сеанса и передайте его функции MySQL RAND
.
Имейте в виду, что ORDER BY RAND()
(с семенем или без него) не самая дешевая операция на планете. Если ваша таблица для поиска небольшая, вы можете сгенерировать таблицу с кучей столбцов, заполнить ее случайными числами (вероятно, сгенерированными RAND
) и присоединиться к этой таблице, чтобы обеспечить случайную последовательность для упорядочения. Вы могли бы предоставлять разные последовательности для разных средств просмотра, выбирая разные столбцы из таблицы случайных чисел: для одного пользователя вы сортируете по столбцу 11 таблицы / матрицы случайных чисел, а другой пользователь будет использовать столбец 23. Имейте в виду, что таблицы (с первичным key) на самом деле являются просто функциями в конечной области (и наоборот), поэтому выбор, который вы выбираете, часто является лишь деталью реализации. Реализация RAND
с использованием таблицы, как правило, будет довольно громоздкой, но я все равно решил упомянуть эту опцию.