mysql随机取一条数据算法中各条数据出现的概率不平衡
网上好几个经典示例,一般都用rand()函数,此处用其中一列说明
SELECT * FROM user where user_id >= ((SELECT MAX(user_id) FROM user)
-(SELECT MIN(user_id) FROM user)) * RAND()
+ (SELECT MIN(user_id) FROM user) LIMIT 1
当rand()获取的0和1 这2个极端随机数后,查询语句的结果才会显示出第一条和最后一条数据,假如有4条数据,这4条数据出现的概率并不是各25%(由于出现0/1几率较小,一般都是0.**),例如对抽奖算法中,对第一个参与者非常不公平
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这种事情不应该是业务层做吗……
直接按算法选出一个id再读数据库吧……
你的这个随机的逻辑有问题。首先它会依赖于
user_id
本身的分布。举个极端的例子,你有101个user_id,分别是:1,2,3,.... 100, 10000。那么按照min + (max - min) * rand
的逻辑,绝大部分机会都给了10000。其次你limit的用法也不对。其实一条
就好了。