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文章来源:https://www.toymoban.com/news/detail-698562.html
C礼物区间3-6文章来源地址https://www.toymoban.com/news/detail-698562.html
到了这里,关于随机数算法,SQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!