2016-09-12 28 views
0

正如标题所描述的,即时通讯寻找写一些SQL(mySQL数据库),它显示随机记录具有最高值随机记录显示更频繁,然后其他人。sql order by rand()最高值显示更频繁

select CPC from advertisement ORDER BY RAND(), CPC DESC 

上述代码无法按预期工作。

继承人后什么IM:

我有10个广告商各自制定自己的CPC(每次点击费用)预算。具有最高预算的广告客户将他/她的广告更频繁地展示给其他人,但都是随机的。分别在大多数的曝光顺序 -

user_id | cpc | 
------------------ 
1  | 0.10 | 
2  | 0.03 | 
3  | 0.20 | 
4  | 0.04 | 
5  | 0.55 | 
6  | 0.12 | 

所以用户5将有他的广告,则他人 5,3,6,1,4,2展示更多freqently。

有点像我假设谷歌AdWords工作,用户预算越高,他/她会有更多的印象。

我知道没有人喜欢RAND(),但我不会再有100个广告客户。

问候

+0

您能否分享一些样本数据和您想要的结果?理解ATM这个问题有点困难(至少对我来说) – Mureinik

+0

我投票赞成'这超出了MySQL的范围',应该在应用程序级别完成,它将非常简单。 – user3741598

+0

你可以使用'RAND()* CPC'命令(或任何其他功能取决于cpc) – Solarflare

回答

0

我要说到做到这一点,最好的办法是,像这样:

SELECT user_id, CPC 
FROM advertisement 
ORDER BY RAND() * CPC DESC 

这会让你的广告随机出现的,但user_id说明5理论上将出现5.5倍比1的user_id更频繁,这是公平的。

+0

感谢您的回复,这似乎是完美的,RAND()+ CPC DESC与RAND()* CPC DESC使? – GypsumCode

+0

'RAND + CPC'会不公平。如果你得到的最大RAND为0.1,那么它将是1.1,0.5的最大值将是1.5 ...使用这种方法,0.1很可能会超出0.5,因为0.5只有50%比0.1更容易被选中......随着乘法,这是公平的。由于点击次数是付费的5倍,因此点击次数可能会增加5倍。 – Pachonk

+0

非常感谢您的回答和很好的解释。这按预期工作。问候 – GypsumCode

0

因为你cpc小于1,你可以这样做:

select CPC 
from advertisement 
order by RAND() + CPC DESC 

该调整的cpc值,所以较高的值应该出现在名单上的高。