Ja dawno temu robiłem losowe wyświetlanie banerów, na czystej losowości, bez żadnych ratio i tak dalej. Banery były w bazie danych, gdzie była m.in. ilość kliknięć, czas wyświetlania dozwolonego, ścieżka do obrazka, ścieżka do linka i tak dalej.
Funkcja wyglądała tak:
function generate_ad()
{
$db = new mySQL();
// pobierz losowy naer z bazy który jest aktywny (ma więcej lub 0 klinięć lub wyświetleń, a jego expiration time jest większy
// niż czas obecny lub równy 0
$result = $db->Query("SELECT ad_id, ad_title, ad_image_url, ad_views, ad_point_value FROM " . CHEPRE_PREFIX . "ads WHERE ad_clicks >= 0 AND " .
"ad_views >= 0 AND (ad_expiration_time >= NOW() OR ad_expiration_time = '0000-00-00 00:00:00') ORDER BY RAND() LIMIT 1;");
if ($db->Num_rows($result) == 0)
return '<a href="[ciach]">[ciach]</a>';
$fld = $db->Fetch_array($result);
// jeżeli są ogranicznia ilości wyświetleń to zmniejsz licznik wyświetleń o jeden dla wybranego banera
if ($fld["ad_views"] > 1)
{
$db->Query("UPDATE " . CHEPRE_PREFIX . "ads SET ad_views = ad_views -1 WHERE ad_id = " . $fld["ad_id"] . ";");
}
elseif ($fld["ad_views"] == 1)
$db->Query("UPDATE " . CHEPRE_PREFIX . "ads SET ad_views = -1 WHERE ad_id = " . $fld["ad_id"] . ";");
// zwróc kod HTML do obrazka
return '<a href="click.php?id=' . $fld["ad_id"] . '"><img src="' . $fld["ad_image_url"] . '" alt="Chepre Ad System" title="' . $fld["ad_title"] . '" /></a>';
}
$db to obiekt klasy MySQL, chodzi o to samo, co normalne funkcje dostępu do bazy danych.