rotoZOOM
ACM maniac
Специфическая выборка элементов
Всем здравствуйте!
Есть задачка, которую пока не могу придумать как решить более рационально с точки зрения
производительности/памяти.
Начальные данные.
Есть список компаний.
Для любого посетителя сайта формируется рандомный порядок вывода этих компаний на экран, и такой порядок остается,
пока посетитель не уйдет с сайта (сессия).
Список выводится постранично.
Собственно задача.
Есть возможность установить спецразмещение для некоторых компаний на определенных позициях в этом списке.
Что это значит?
Пусть есть три компании: А, Б, В.
спецразмещения:
А на место 1 с весом 4
Б на место 1 с весом 6
В на место 3 с весом 1.
Это значит, что на первом месте нужно обязательно выводить А либо Б, причем А с вероятностью 40%, а Б с вероятностью 60%.
На третье место всегда идет В.
Остальные рандом.
Сейчас решаю так (костыль) - считываю все компании в память и выборку веду с помощью PHP.
Это мне простительно, так как компаний пока не больше 150-200, но при росте их числа
начнутся тормоза.
Кэш прикрутить надо, но он идет в последнюю очередь.
Вот собственно сам вопрос: можно ли сделать такого рода выборку средствами мускула, без большого числа запросов?
Спецразмещение можно засунуть, как в таблицу с компаниями (добавить два поля (место, вес)), так и вынести в отдельную таблицу, связав по айдишнику (место, вес, id_компании).
Всем здравствуйте!
Есть задачка, которую пока не могу придумать как решить более рационально с точки зрения
производительности/памяти.
Начальные данные.
Есть список компаний.
Для любого посетителя сайта формируется рандомный порядок вывода этих компаний на экран, и такой порядок остается,
пока посетитель не уйдет с сайта (сессия).
Список выводится постранично.
Собственно задача.
Есть возможность установить спецразмещение для некоторых компаний на определенных позициях в этом списке.
Что это значит?
Пусть есть три компании: А, Б, В.
спецразмещения:
А на место 1 с весом 4
Б на место 1 с весом 6
В на место 3 с весом 1.
Это значит, что на первом месте нужно обязательно выводить А либо Б, причем А с вероятностью 40%, а Б с вероятностью 60%.
На третье место всегда идет В.
Остальные рандом.
Сейчас решаю так (костыль) - считываю все компании в память и выборку веду с помощью PHP.
Это мне простительно, так как компаний пока не больше 150-200, но при росте их числа
начнутся тормоза.
Кэш прикрутить надо, но он идет в последнюю очередь.
Вот собственно сам вопрос: можно ли сделать такого рода выборку средствами мускула, без большого числа запросов?
Спецразмещение можно засунуть, как в таблицу с компаниями (добавить два поля (место, вес)), так и вынести в отдельную таблицу, связав по айдишнику (место, вес, id_компании).