2015-06-11 31 views
0

我有以下情況。我有一些員工每個都有工作比例。每當一個任務來了,我需要把它分配給某個員工按照例如就業率:設置每位員工的工作百分比

Employee 1 Job Percentage 
James  75% 
Adam  15% 
Cindy  10% 

所以,當工作來獲得它必須分配給詹姆斯的75%的時間,亞當15%辛迪10%。這些存儲在MySQL數據庫中。

如果只有2名員工,這很容易解決,因爲我可以從1到100的隨機數(蘭特1,100),看看它是否在一個員工百分比範圍內並相應地分配工作。這裏的問題是員工數量可能會變化,員工可能會被添加和移除。任何人都可以爲此提出解決方案嗎?任何想法都歡迎。

+0

將作業添加到工作比例較少的員工然後更新它的行? – Goikiu

回答

0

你需要的是累計百分比。然後你可以使用rand()。所以:

select a.* 
from (select a.*, 
      (@cume := @cume + percentage) as cume 
     from allocations a cross join 
      (select @cume := 0) 
    ) a cross join 
    (select rand() as r) r 
where r.r between cume - percentage and cume 
limit 1; 

的想法是讓範圍,如:

0%  75% 
75%  90% 
90% 100% 

rand()在子查詢的目的是讓只有一排。因爲查詢使用的是between,所以可能是每幾億次運行就會重複一次,所以我加了limit 1。它使用between以防萬一rand()返回0或1.