2012-02-15 4 views
0

Я создал механизм рекламного баннера для веб-сайта. Значок баннера, url и т. Д. Хранятся в базе данных mysql. На данный момент я просто получаю случайный баннер из всех доступных и показываю его на веб-сайте. Но как я могу реализовать какой-то механизм, чтобы все баннеры отображались равномерно, но в случайном порядке?Получение случайной строки (flash-баннера) из mysql с равномерным распределением

ответ

2

Добавьте еще один столбец в таблицу баннеров, в которой будет указано количество раз, когда использовался баннер. Допустим, вы назовете его «banner_usages».

Я предполагаю, что вы получаете случайный баннер с помощью выбора, заказа функцией рэнд() и ограничение количества результатов 1.

Поэтому, учитывая новый столбец, вы должны только добавить новое поле сортировки , новый столбец, как первый использованный

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

Таким образом, ваш запрос должен быть чем-то вроде:

SELECT * FROM `banners` ORDER BY banner_usages ASC, RAND() LIMIT 1 

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

UPDATE `banners` SET `banner_usages` = `banner_usages` + 1 WHERE `banner_id` = _THE_ONE_YOU_JUST_GOT_ 

Это должно быть его

+0

Спасибо, работает просто идеально :)! – fjckls

+0

@fjckls cool, я рад, что это помогает – mishu

+1

+1 для простого решения. Если вы хотите добавить еще один баннер через некоторое время: 'INSERT INTO баннеры (banner_usages, ...) VALUES ((SELECT MIN (banner_usages) ОТ баннеров), ...)', чтобы новое объявление не превзошло все другие. –

0

Добавьте столбец счетчика к вашей SQl таблице отслеживать, сколько раз каждые добавить просматривались и использовать

SELECT ad_url FROM ads ORDER BY counter LIMIT 1; 

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

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