我希望在网站上轮播广告,但我想提出一个考虑以下内容的公式:
然后在最后我想了解一些如何随机化结果。将这些因素纳入PHP脚本或mysql查询的最佳方法是什么?到目前为止,我尝试过这样的查询:
$result = mysql_query ("SELECT * FROM banner_ads WHERE usedImpressions/totalImpressions < $threshold OR usedImpressions = 0 ORDER BY RAND() LIMIT 1");
但是当然,这里的一大限制是什么应该是一个很好的门槛值,它仍然没有考虑到它的创建的重量或时间戳。
答案 0 :(得分:2)
不确定您是否只是要求查询,但伪代码/数学解决方案是:
首先计算每个广告的权重:
CurrentWeight = BaseWeight
+ AdPriority
- Impressions*ImpressionWeight
- (CurrentDate-CreateDate)*DateWeight;
然后,您的每个广告都有一定百分比的被挑选机会:
PerAdPercentage = CurrentWeight / Sum(allCurrentWeightsAllAds)
使用该百分比为每个广告分配一个数字块(例如0-100)。现在使用随机数生成器选择该范围内的数字并选择获胜者。
要处理配额:
我还添加了一个值来优先排列距其配额最远的广告。
回复:你的评论:
当前体重应该计算您想要展示广告的频率。然后,将计算出的权重相互比较,以确定每个广告的相对优先级。如果每个广告都有一个数字块,具体取决于它的相对权重,那么你会更频繁地选择权重高于权重较小的数字。
ImpressionWeight和DateWeight是您用来平衡/调整等式的任意数字,以便为您的体重计算适当的值 - 基本上将数字标准化。 (例如,假设您以毫秒为单位进行日期数学计算并得到大量数字,但使用1-10作为您的AdPriority - 如果将这些数字合并而不加权日期值以使其成为非常小的数字,则这些数字毫无意义)
最后,您可能需要考虑日期和展示次数可以从总体权重中减去的最大值,因为您可能不希望将百分比/权重驱动为零。对于约会,你可能想要一些非线性衰变的东西。