לא משהו שבדקתי,
אבל הנה דרך שחשבתי עליה:
קוד:
$count = 1;
$sql = "SELECT COUNT(`views`) FROM `t_banners`";
$res = mysql_query($sql);
if($row=mysql_fetch_array($res)) { $count = intval($row[0])+1; }
$sql = "SELECT * FROM `t_banners` WHERE ((`rate` * {$count}) > `views`) ORDER BY RAND() LIMIT 1";
$res = mysql_query($sql);
if($row=mysql_fetch_assoc($res))
{
// show banner code here
$sql = "UPDATE `t_banners` SET `views` = `views` + 1 WHERE `id` = '{$row["id"]}'";
mysql_query($sql);
}
בהנחה שבטבלה t_banners יש שדה בשם rate שהוא אחוז ההופעות (למשל: 0.4), ושדה views שהוא כמות הצפיות בפועל
1. מחשבים את כמות הצפיות הכללית שהיתה עד עכשיו + 1 ומכניסים למשתנה $count
2. שולפים באנר אקראי בו אחוז החשיפה כפול מספר הצפיות הטוטאלי גדול ממספר הצפיות בפועל של הבאנר
אחוז החשיפה כפול מספר הצפיות הטוטאלי זה כמה פעמים הבאנר היה אמור להיות מוצג, אז אם המספר הזה גדול ממספר הצפיות בפועל, צריך להציג אותו.
נגיד יש 2 באנרים,
אחד עם אחוז של 0.4 ו- 4 צפיות
ואחד עם אחוז של 0.6 ו- 5 צפיות.
סך הצפיות הטוטאלי (9) + אחד יהיה 10.
הראשון לא יוצג כי 0.4 * 10 שווה ל- 4.
השני כן יוצג כי 0.6 * 10 גדול מ- 5.
מקווה שזה ברור ושזה יעזור
