根据用户拥有的“机会”数量分配行

时间:2018-09-26 21:57:37

标签: mysql sql

我需要根据从以前完成的工作计算出的分数(“机会”数)为用户分配工作。这是我的用户列表:

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,但是没有什么令人满意的。

实现此目标的最佳方法是什么?谢谢

2 个答案:

答案 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无法获得优化子查询并仅调用一次的精妙想法。