2013-11-15 2 views
0

У меня есть база данных с более чем миллионом записей. Я пытаюсь получить записи в рандомизированном порядке. База данных заполнена ссылками на изображения, и каждое изображение имеет уникальный номер. Итак, я должен иметь возможность воссоздать тот же «случайный» порядок для следующих и предыдущих кнопок на картинках?Регенерировать «случайный» запрос MySQL

Есть ли способ придумать запрос и сохранить его в файле cookie или сеансе и повторно использовать его для восстановления моего случайного порядка?
В целом это эффективно, потому что я не хочу, чтобы время загрузки было высоким?

Любое предложение является удивительным.

+0

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

+0

Вы также можете использовать 'shuffle()' в массиве результатов из вашего SQL-запроса. http://php.net/manual/en/function.shuffle.php –

+0

@sectus, вот ответы на вопросы: 1) Я просто хочу пройти через них, в том же порядке, который был показан в галерее 2) Нет. Это может быть одно и то же, но я хочу изменить порядок, на который они нажимают «Перемешать снова». 3) Нет дубликатов. 4) Необычный порядок совершенен. –

ответ

4

Самый простой способ для этого - поместить другой столбец в свою базу данных, правильно проиндексировать его и дать ему случайное целое число. Тогда вы можете ORDER свою таблицу на этом, и пусть она будет стабильной. Это сделает всех пользователей одинаковыми, но случайными, последовательными.

EDIT: Если вы хотите, чтобы каждый пользователь должен иметь свою собственную последовательность, это тоже достаточно просто, так как Алма Do сказал:

SELECT * FROM records ORDER BY RAND(17) 

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

SELECT * FROM records ORDER BY RAND(2308) 

Но это не будет быстро.

Единственная альтернатива, которую я могу придумать, будет использовать много места: при вычислении последовательности для пользователя сохраните ее в таблице. Для этого потребуется таблица из двух столбцов из миллиона строк на пользователя.

+0

Это будет работать, но каждый пользователь будет иметь один и тот же порядок, и заказ не может быть изменен каждый раз, когда пользователи нажимают «Shuffle». –

+1

Это не было частью вашего вопроса, и мы не являемся телепатами. Ред. – Amadan

1

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

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

Это означает, что вы сможете иметь случайный порядок, но все тот же порядок по вашим предыдущим страницам.

+0

Rand() работает отлично, но когда у вас есть 1 миллион записей, чтобы пройти через это очень медленно! –

Смежные вопросы