| 
	
 | 
 Posted by Floortje on 05/28/07 11:58 
Rami Elomaa wrote: 
> alpha.beta0@googlemail.com kirjoitti: 
>> I have a MySQL table of servers, I use RAND() to pick a random server 
>> to use each time, but how can I add a number to each server entry that 
>> allows it be to picked more often than the other 20 servers? 
>> 
>> For example Server1's weight is 80 and Server2's weight is 40 and 
>> hence Server1 is more likely to be picked than the others. 
>> 
>  
> In theory like this: pick a random weight and take into group all the  
> items that weigh more, it's more likely that heavier items are taken  
> into the group, than the lighter. From the group you have created, pick  
> one randomly. If no items were in the group, your random weight was too  
> big, so you might limit it to < maxweight, so that always at least one  
> item is picked. 
>  
> Transforming this into a query is another thing. This is very rough  
> example but you'll get the idea, I suppose: 
>  
> SELECT * FROM ( SELECT * FROM servers WHERE weight > RAND() ) ORDER BY  
> RAND() LIMIT 1,1 
 
Nice .. real nice but wrong :-( 
 
say you have this 
a-2 
b-1 
c-1 
d-1 
 
Valid random weight numbers are 1 and 2 (both 50%) 
 
Then your chances of picking A are 62.5% while B,C,D only get a 12.5%  
change of being picked (instead of 40-20-20-20) 
 
-- 
Arjen 
www.hondenpage.com
 
  
Navigation:
[Reply to this message] 
 |