Назначать строки в зависимости от количества «шансов» пользователя - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужно назначать задания пользователям на основе оценки (количества «шансов»), рассчитанной на основе предыдущих заданий, которые они выполнили.Вот моя таблица пользователей:

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 (с текущим значением NULL user), например,

id  title               user
1   Sort filing         NULL
2   Clean office        NULL
3   Order stationery    NULL

Я хочуназначьте эти задания пользователям выше, используя взвешивание, основанное на количестве «шансов», которые они имеют.Например, у Анны будет 6 шансов получить один из этих jobs, а у Бориса - 1.

Я играл с CASE, который назначит user для jobs, но ничего не удовлетворительное.

Какой лучший способ для меня это сделать?Спасибо

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если 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 не получает (блестящее) представление ооптимизировать подзапрос и вызывать его только один раз.

0 голосов
/ 27 сентября 2018

Предположительно, вы ищете что-то вроде этого ...

SELECT user 
FROM my_table 
ORDER BY RAND() * chances * (SELECT SUM(chances) FROM my_table) DESC ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...