随机数算法,SQL

SELECT
    * 
FROM
    prizes_config 
WHERE
    weight > ( SELECT FLOOR( RAND() * MAX( weight )) FROM prizes_config ) 
    order by weight asc
    
    
--    LIMIT 1;

记录

id      权重

1       5

2       10

3       50

4      100

找权重最大的那个值,调用rand()函数,它会随机生成一个0-1的值
然后 rand * 100 得出一个随机值 

它的范围 0 <=  随机值100

例如本次随机值为2,那么找到 大于2的所有记录,然后升序

此时查询结果为

2       10

3       50

4      100
最后LIMIT 1 返回第一条

注意!!! 这个有局限性,通过SQL的方式,如果有一个需要修改,其他的可能也需要修改

它的区间是既定的,无法动态计算。

建议还是放到代码中去做计算,可以做到动态计算

例如A礼物权重1,B礼物权重2,C礼物权重3

那么

A礼物区间 0-1

B礼物区间1-3

C礼物区间3-6

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值