Ротатор баннеров

Допустим, у нас есть около 1000 баннеров, для каждого из которых указана своя частота показов. Сайт с высокой посещаемостью. Наилучшим решением будет являться помещение в cron PHP-скрипта, который рассчитывает ID показываемого баннера и записывает его в кэш или буфер memcashed

Теперь перейдем к написанию непосредственно PHP-скрипта, а именно, как наиболее оптимально обратиться к MySQL. Наиболее быстрым вариантом будет что-то типа такого:

//выполняем запрос по определенному полю bannerID, указав точное число для него, 

//сгенерированное с помощью RAND(). 

$get_banner = mysql_query("SELECT bannerID, banner_img, banner_url  FROM banners_table WHERE bannerID >= 

(SELECT FLOOR( MAX(bannerID) * RAND()) FROM banners_table) AND day_views<rate AND enabled=1 ORDER BY bannerID LIMIT 1");

$banner = mysql_fetch_assoc($get_banner);

//echo "<a href='".$banner['banner_url']."'><img src='".$banner['banner_img']."'></a>";

В случае отсутствия выбранного случайным образом bannerID, либо если баннер «выработал показы» (day_views>rate), либо отключен (enabled=0), выбирается ближайший больший bannerID. Именно поэтому используется «>=». 

Для реализации инкрементного увеличения счетчика показов баннеров можно в теле загружаемой страницы, после того как мы получили там bannerID (в зависимости от того, как вы все организовали), вписать строку:

$update_banner = mysql_query("UPDATE banners_table SET day_views = day_views+1 WHERE bannerID = '".$banner['bannerID']."' ");

Хотя  «вешать» update в страницы на ресурсе с высокой посещаемостью крайне не рекомендуется, поэтому используйте вариант со счетчиками и memcashed, который был описан выше. 

Кристофер

www.igd.by

Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!