- 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