公式如下:
rand() * (y-x) + x
咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数。
而在mysql里,随机数函数rand不能传参,产生的0到1之间的浮点数,要是我们需要在mysql产生大于1的随机整数,该怎么办呢?
这样的需求并不陌生,例如,咱做的文章系统,需要作弊,给文章的浏览量随机加上某个范围内的整数。
现在,假设需要产生234到5678之间的随机整数,mysql下怎么实现。
我们无法改mysql下rand的产生值,但我们可以改变我们的需求,
1、我们需要最小是234,最大是5678,rand产生的最小是0,最大是1,我们需求的数减去234看看?
最小数234 - 234 = 0,最大数5678 - 234 = 5444;嘿,亮点,我们需求的最小数跟rand产生的最小吻合了。
我们只要让函数产生0到5444的随机数,再拿来加上234,就是我们原需求了。
我们原需求用个伪表达式来描述,就会是
取整(rand(0,5444) + 234)
2、现在只要想办法将我们需求再变一下,使得最小数为0 不变,最大数变化成1,
很明显,5444减去5443就是1了,但这样,最小数就会是负数了。
要最小数还是0,最大数是1,太简单,5444 / 5444 = 1 , 0 /5444 = 0
现在,原需求的伪表达式就是:
取整(rand(0,1) * 5444 + 234)
3、把伪表达式的参数去掉,就跟mysql下的rand一样写法,一样效果。取整函数我们使用四舍五入ROUND
所以,我们原需求的最终真mysql表达式就是
ROUND(RAND() * 5444 + 234)
总结一下思路:
1、比较rand(x, y)与rand(0,1)的差异。
2、将rand(x,y)逐步向rand(0,1)变换
rand(x,y)
= rand(0, (y-x)) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) +x
= rand() * (y-x) + x
这是一个很简单的数学算术式,用一个简单的例子,说了一下一些算法的基本技巧:降低要求使得自己所掌握的知识能达到需求。
MySQL,指定范围,随机数
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]