2014-01-14 3 views
0

У меня есть запрос sql, который получает все статьи из таблицы. Этот список упорядочен по категориям, цене и задержке.MySQL - Случайный сортировать по контексту

Некоторые изделия имеют одинаковую цену, ту же категорию и ту же самую задержку, поэтому они всегда поступают в одном порядке. Моя проблема: почему одна статья всегда приходила бы перед другой, если бы они имели одни и те же характеристики? Мне нужно перетасовать их после случайного элемента, который сохраняется в файле cookie, так что я всегда могу получить тот же «тасовку» для данного пользователя?

Exemple

У меня есть 100 статей, из них 5 имеют те же характеристики (мы называем их art1, ART2, Art3, art4 и art5).

после моего заказа, я получаю этот список:

art1 
art2 
art3 
art4 
art5 

Но так как они имеют те же характеристики, мне нужно перетасовать их в случайном порядке для данного посетителя, например, один пользователь должен получить этот список:

art2 
art5 
art4 
art1 
art3 

следующий пользователь

art4 
art3 
art1 
art5 
art2 

и т.д ...

Трюк: мне нужно помнить, как я могу получить каждый случайный порядок, поэтому я могу получить точно такой же порядок для данного пользователя, если он вернется позже в тот же день (срок действия файла cookie истекает ежедневно).

Я знал, что некоторые веб-сайты используют переменную контекста для перетасовки, но как это сделать?

ответ

0

Вы можете добавить другое поле заказа с помощью ORDER BY category, price, delay, RAND(seed) и добавить свои данные из файла cookie в качестве семени в случайную функцию.

Тогда вы всегда будете получать одинаковую последовательность чисел для своего пользователя, пока семя не изменится.

См https://stackoverflow.com/a/6160938/1634286

+0

вы, парень, здорово! большое спасибо ! – user2733521

0

Есть много статей говорят о том, как случайно выбрать записи в MySQL.

Использование ORDER BY RAND происходит очень медленно. Лучше, если вместо этого использовать PHP-код.

Как только вы получите записи, сохраните идентификаторы в файле cookie/session, чтобы впоследствии их восстановить.

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