我需要根据从以前完成的工作计算出的分数(“机会”数)为用户分配工作。这是我的用户列表:
user chances
Anna 6
Barry 4
Steve 3
Jackson 3
Helga 3
Maureen 3
Paul 3
Karen 2
Anita 2
Samson 2
Frank 2
Jean 1
Lilly 1
Boris 1
在另一个表中,我有100行未分配的jobs
(当前为user
为空),例如
id title user
1 Sort filing NULL
2 Clean office NULL
3 Order stationery NULL
我想使用基于他们拥有的“机会”数量的权重将这些作业分配给上述用户。例如,安娜将有6次被分配为jobs
其中之一的机会,而鲍里斯将有1次。
我一直在玩一个CASE,它将为user
分配一个jobs
,但是没有什么令人满意的。
实现此目标的最佳方法是什么?谢谢
答案 0 :(得分:0)
想必您正在追求这样的东西...
SELECT user
FROM my_table
ORDER BY RAND() * chances * (SELECT SUM(chances) FROM my_table) DESC ;
答案 1 :(得分:0)
如果returned non-zero exit status 255
是一个很小的整数,那么最简单的方法可能是:
changes
update anothertable at
set user = (select user
from chances c cross join
(select 1 as n union all select 2 union all select 3 union all
select 4 union all select 5 union all select 6
) n
on c.chances <= n.n
where at.user is null
order by rand()
limit 1
);
子句只是为了使MySQL无法获得优化子查询并仅调用一次的精妙想法。