我需要根据用户以前完成的工作计算出的分数(“机会”的数量)来分配工作给用户。下面是我的用户表:
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次。
我一直在尝试一个案例,它将为jobs
分配一个user
,但没有一个是令人满意的。
我实现这一目标的最好方法是什么?谢谢
发布于 2018-09-27 06:23:29
想必,你想要的是这样的东西...
SELECT user
FROM my_table
ORDER BY RAND() * chances * (SELECT SUM(chances) FROM my_table) DESC ;
发布于 2018-09-27 06:55:39
如果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
);
where
子句只是为了让MySQL不会有优化子查询并只调用一次的(聪明)想法。
https://stackoverflow.com/questions/52526551
复制相似问题