Допустим, у нас есть около 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, который был описан выше.
Кристофер
Горячие темы