2016-09-12 29 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值,所以較高的值應該出現在名單上的高。