приоритет показа баннеров

Vital_N

Новичок
приоритет показа баннеров

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

----
может быть ветси какой-нить лог , например берем для показа банеры пока числ показов не достигло 5, если достигло пяти, берем для вывода баннер с нормальным приоритетом, как только достигло 8, берем для вывода баннер с низким приоритетом, как только общее чсило показа достигло 10 - обнуляем (пропорции приблизительные)
или не так?
 

Popoff

popoff.donetsk.ua
я делаю так: для каждого сообщения (банера; у меня это называется сообщениями, потому что там можно не только банеры хранить) хранится дополнительное поле, назовем его f_order. В этом поле - число. Следующим будет показано сообщение, в котором значение этого поля - минимально. При показе сообщения увеличиваем значение f_order, к примеру, на $d=$count_total/$i_times; $count_total - общее число сообщений, среди которых крутится это сообщение, $i_times - сколько раз будет показано это сообщение за один полный цикл показа всех сообщений. Чем больше это число, тем чаще показывается это сообщение.

У этого способа есть два очевидных недостатка:
1) f_order постоянно увеличивается и есть опасность выхода за пределы представимости
2) что бы выбрать сообщение с минимальным f_order, требуется либо отключить индексы, либо индексы будут обновляться фактически при каждом показе сообщения

-~{}~ 23.01.05 15:59:

для того, что бы сообщения не показывались всегда в одном и том же порядке, можно взять $d=$count_total/$i_times+mt_rand(0,1000)/100.0;
100.0 - это степень случайности. Чем меньше это число, тем сильнее будет перемешиваться порядок показа сообщений, но тем быстрее будет расти f_order...
 

untied

Сдвинутый новичок
Возможно не самый оптимальный вариант, но я делал таким образом... (если кто разовьет идею и расскажет -- буду только рад).

Баннеры показываем случайным образом, но каждому баннеру назначаем приоритет. К примеру:

Баннер 1 : 10
Баннер 2 : 20
Баннер 3 : 40

Теперь нужно вычислить случайное число, которое выбирало бы нужный баннер, причем в соответствии с приоритетом.

Складываем все приоритеты, получаем 70, и отображаем на числовой прямой отрезки приоритетов от нуля до бесконечности:

0-1---10------30------------70---->

(т.е. отрезок от 0 до 10 представляет собой приоритет баннера 1, отрезок от 10 до 30 -- приоритет баннера 2, отрезок от 30 до 70 -- приоритет баннера 3).
Теперь генерируем случайное число от 1 до 70 и смотрим, в какой отрезок оно попадет (естественно, вероятность попадания в более длинный отрезок -- выше, таким образом и срабатывает приоритет баннера). Соответственно, если случайное число N попало в отрезок от 1 до 10 -- показывается баннер 1, если в отрезок от 11 до 30 -- баннер 2, если в отрезок от 31 до 70 -- баннер 3. Порядок следования баннеров не важен (приоритеты могли быть и такие: 40-10-20), важна вероятность попадания в более длинный отрезок.

Думаю, программную реализацию этого алгоритма любой желающий напишет сам. ;)
 

Vadimka

Новичок
а может ктото и поможет начинающему реализовать (написать) данный алгоритм
 
Сверху