order by Rand() - для каждого пользователя свой

Benderlio

Новичок
Добрый день,
Задача такая:
пользователь заходит на страницу, получает список из 10 позиций упорядоченный по RAND() и разбивка на страницы 1,2,3 и т.д.

переходит на след. страницу и необходимо что бы не повторялись результаты с предыдущей страницы.
Надеюсь понятно объяснил.

Подскажите как реализовать?
Спасибо.
 

rotoZOOM

ACM maniac
Нахожусь в фоновом процессе решения подобной задачи. Поделюсь своими изысканиями в этом направлении.
Не использовать order by rand().
Имеет смысл завести таблицу, в которой будут хранится несколько последовательностей вывода записей.
И для каждого пользователя выбирать свою последовательность, запоминая ее идентификатор в сессии.
Последовательности поддерживать в актуальном состоянии при удалении/добавлении записей.
Шаффлить их по крону.
Учесть момент, чтобы избежать такого: пользователь сидит на сайте, а в это время ты пошаффлил его последовательность.
Естественно, это все справедливо когда количество записей большое.
Если их 100, то можно обойтись и скриптовым рандомом.
 

craz

Нестандартное звание
выбирать все записи(пихнуть их в сессию) и уже потом разбить на страницы, а не разбивать каждый раз при переходе на пагинируемые страницы
 

rotoZOOM

ACM maniac
craz сначала надо узнать максимальное количество записей и максимальное количество одновременных сессиий + не учитывается возможное удаление/добавление записей во время сёрфинга пользователей.
 

Benderlio

Новичок
craz у меня данные (2000 строк) не удаляются, только добавляются, но не настолько динамично, так что думаю наверное такой вариант подойдет.
Спасибо всем.
 

craz

Нестандартное звание
craz сначала надо узнать максимальное количество записей и максимальное количество одновременных сессиий + не учитывается возможное удаление/добавление записей во время сёрфинга пользователей.
тогда надо отказать от показа рандома вот и все. или придумать свой псевдорандом которые будет похожна псевдорандом компа)) . Не стоит упираться рогом если реализация становиться сложной - крон, шафл, 100 000 юзеров...
 

craz

Нестандартное звание
craz у меня данные (2000 строк) не удаляются, только добавляются, но не настолько динамично, так что думаю наверное такой вариант подойдет.
Спасибо всем.
нуда знаешь даже как можно... можно же не все засовывать... делаешь два запроса
1) выбираешь только id из таблицы суешь их в сессию
2) выбираешь из них первые 40 к примеру, по ним опять селект, и т.д. на каждой новой странице...
 

craz

Нестандартное звание
Есть разные задачи, я бы не был столь категоричен, не зная ТЗ.
ТЗ пишут не с потолка, если данная операция будет тормозить все приложение и подвешивать сервак как вы думаете может стоит переписать ТЗ?
 

craz

Нестандартное звание
Или найти правильное решение задачи, если оно есть. :)
или заняться другими частями приложения. которые требуют именно решение задачи, а не задрачивания на клиента "А я хочу вот так!!! хныкхныкхнык!!"
 

rotoZOOM

ACM maniac
Раз пошла такая пьянка.
У меня хороший заказчик. А хороший он тем, что при добавлении задач в таск манагер советуется со мной по возможности технической реализации данной задачи
и готов идти на компромиссы в разумных пределах. Но есть у него и генеральная линия партии, которая имеет под собой четко аргументированную основу,
базирующуюся на многолетнем опыте работы в его сфере. Ее желательно не гнуть, если существует малейшая возможность.
Это была преамбула.
Амбула.
На сайте необходимо отображать список товаров (естественно пагинированный). Ввиду того, что товары размещают различные компании на одинаковых условиях, то они вправе надеяться на то,
что частота попадания их товаров на первую страницу будет такой же, как и частота попадания товаров другой компании. Это генеральная линия.
Иначе компании уйдут с сайта и правильно сделают.
Естественно, существуют приоритетные размещения на отдельных условиях, но это только несколько первых мест из планируемых более 10 000.
Сортировка по каким-либо характеристикам товара не подходит, так как это не решает проблему равномерного распределения показа.
Сайт на VPS, посещений пока не так много, поэтому нагрузку держит.
Запихивать идентификаторы товаров в сессию каждому пользователю?
Это действительно лучшее решение? :)
 

craz

Нестандартное звание
Запихивать идентификаторы товаров в сессию каждому пользователю?
Это действительно лучшее решение? :)
создавать шафл таблиц по крону тоже лучшее решение? с теорией вероятности знакомы? вам не поможет ранд - это псевдорандом близко-преближенный к равномерному распределению, на выборке из миллиона все товары с равной вероятностью будут находится там где им положено теорией. На практике именно изза это равномерного распределения и выборки от вашего заказчика и уйдут клиенты. потмоу что у клиента на 1 странице то 1 товар то нет не фига и на второй нет и на третьей - дальше он искать не пойдет и скажет что вы жулики, пересматривайте бизнес модель - тут нарушение именно безнес логики самой работы вашего клиента.
 

jonjonson

Охренеть
Интересный этот рандом с постраничным выводом... Особенно интересно в какую часть из псевдорадомных цепочек вставлять новые значения? И если в конец всех (что логично, а иначе придётся смещать остальные значения для каждой), то не станут ли они уже не совсем радомные с какой-то позиции?
 

rotoZOOM

ACM maniac
создавать шафл таблиц по крону тоже лучшее решение?
Я только поделился некоторыми мыслями, о чем и указал в первом посте.
с теорией вероятности знакомы? вам не поможет ранд - это псевдорандом близко-преближенный к равномерному распределению
я, какбэ, в курсе и псевдорандом вполне подойдет.
Пусть у клиента месяц не будет ни одного товара на первой странице, зато потом появится сразу 5. Самое главное, чтобы список товаров не "залеживался" и клиенты видели, что товары и компании меняются регулярно.
 

jonjonson

Охренеть
[Off]
Самое главное, чтобы список товаров не "залеживался" и клиенты видели, что товары и компании меняются регулярно
Тогда проблема в маркетинге. Нужно показывать не разношёрстный рандом, то то что нужно сбагрить в первую очередь. Востребованные новинки и полный неликвид.
[/Off]
 

rotoZOOM

ACM maniac
то не станут ли они уже не совсем радомные с какой-то позиции
Для этого и нужен крон, по которому произойдет очередной шаффл. А время между добавлением позиции и очередным шаффлом можно не принимать в расчет. Естественно, это не неделя. :)
 

craz

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

Знакомы с теорией вероятности напишите пожалуйста процент с которым мой товар к примеру 100 позиций из 10 000 будет на первой странице во временной период с 12часов до 16часов на каждый день кроме субботы и воскресения? Не мне напишите, себе напишите хотя бы. Напишите-> мне попробуйте продать эти сотые проценты, чтобы я заплатил за размещение у вашего клиента или вообще повелся на размещение своего товара у вас.
 

rotoZOOM

ACM maniac
Тогда проблема в маркетинге. Нужно показывать не разношёрстный рандом, то то что нужно сбагрить в первую очередь. Востребованные новинки и полный неликвид.
Кому нужно? Разные компании размещают свой товар. Товары какой именно компании выбрать в качестве самых в_первую_очередь_сбагриваемых? Повторяю, все размещают на одинаковых условиях, за некоторым исключением.
 
Сверху