我有以下情况。我有一些员工,每个员工都有工作百分比。每次有工作出现时,我都需要根据工作百分比将其分配给某个员工,例如:
Employee 1 Job Percentage
James 75%
Adam 15%
Cindy 10%
因此,当有工作空缺时,75% 的情况下必须分配给 James,Adam 为 15%,Cindy 为 10%。这些都存储在 MySQL 数据库中。
如果只有 2 名员工,这很容易解决,因为我可以获取 1 到 100(兰特 1,100)之间的随机数,看看它是否在其中一个员工百分比的范围内,并相应地分配工作。这里的问题是员工数量可以改变,员工可以添加和删除。谁能为此建议一个解决方案?欢迎任何想法。
最佳答案
您需要的是累计百分比。然后您可以使用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。
关于php - 为每个员工设置工作百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780007/