php - 为每个员工设置工作百分比

标签 php mysql

我有以下情况。我有一些员工,每个员工都有工作百分比。每次有工作出现时,我都需要根据工作百分比将其分配给某个员工,例如:

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/

相关文章:

php - php mysql 添加附件到电子邮件

mysql - #1005 - 无法创建表 'testt.rating'(错误号 : 150) with MySQL

php - 样式表未链接

php - jQuery AJAX 表单不发布结果

php - while 循环不会停止遍历数组

mysql - SQL错误代码: 1364 Field 'CustomerNumber' doesn't have a default value

mysql - 在给定日期范围内对相同组合进行计数

php - css div 未被识别

PHP foreach 多次执行代码

mysql - Rails 如何知道 MySQL 数据库在哪里?