我有一个用户和工作队列。一次只能执行一项工作。
User | Job ID | Job Status
------------------------------------------
A | 1 | Waiting
A | 2 | Waiting
B | 3 | Done
B | 4 | Waiting
B | 5 | Waiting
C | 6 | Done
C | 7 | Done
C | 8 | Waiting
我想查询列表以确定作业的优先级,以尝试为所有用户提供相同数量的已完成作业。如果一个用户有大量已完成的作业,则队列应优先考虑其他用户的作业,直到其他用户赶上。
在这种情况下,A没有已完成的作业,因此具有最高优先级:
User | Completed Jobs
------------------------
A | 0
B | 1
C | 2
因此队列的头部应该是A.队列中的第二项应该是用户A或用户B的作业,因为到第二个作业启动时,用户A和B都有一个作业已经完成了。一旦A和B完成了两个工作,它们与用户C的优先级相同。
User | Job ID | User Completed Jobs | Priority
-----------------------------------------------------
A | 1 | 0 0 | 1
B | 3 | 1 1 | 2
A | 2 | 0 + 1 1 | 3
B | 5 | 1 + 1 2 | 4
C | 8 | 2 2 | 5
用户已完成作业列很复杂,因为要计算其值,您需要考虑队列中的所有内容。
那么,在MySQL中有一个很好的方法吗?