我有张table叫 my_users
```
my_id | name | raffle_tickets
1 | Bob | 3
2 | Sam | 59
3 | Bill | 0
4 | Jane | 10
5 | Mike | 12
如你所见 `Sam` 有 `59` 所以他获胜的机会最大。获胜几率: `Sam` =
59/74 `Bob` =
3/74 `Jane` =
10/74 `Bill` =
0/74 `Mike` = `12/74` 附言: `74` 是表中的总票数(只是为了让你知道我不是随机挑选的) `74` )
基于此,我如何随机挑选一个赢家,但确保那些谁有更多的抽奖券有更高的机会被随机挑选?获胜者从总票数中扣除1张
UPDATE my_users
SET raffle_tickets = raffle_tickets - 1
WHERE my_id = --- Then I get stuck here...
服务器版本:5.7.30
2条答案
按热度按时间ffvjumwh1#
对于mysql 8+
5年+
小提琴
z0qdvdin2#
你想从随机样本中得到一个加权拉力。为此,变量可能是最有效的解决方案:
它所做的是计算票的运行总数,然后除以票的数量得到一个介于0和1之间的数字。例如,这可能会产生:
原始行的顺序无关紧要——这就是为什么子查询中没有顺序。
然后将该比率与
rand()
选择特定行。注意,在外部查询中,
@t
是总票数。这是一把小提琴。