Home >Database >Mysql Tutorial >Tips for using MySQL's specified range random number function rand()_MySQL
The formula is as follows:
rand() * (y-x) + x
Everyone who studies PHP knows that the random function rand or mt_rand can pass in a parameter to generate a random integer between 0 and the parameter, or it can pass in two parameters to generate a random integer between the two parameters.
In mysql, the random number function rand cannot pass parameters. The generated floating point number is between 0 and 1. What if we need to generate a random integer greater than 1 in mysql?
This kind of demand is not unfamiliar. For example, the article system we are working on needs to cheat and randomly add an integer within a certain range to the number of views of the article.
Now, suppose you need to generate a random integer between 234 and 5678. How to achieve this in MySQL.
We cannot change the generated value of rand under mysql, but we can change our needs,
1. The minimum we need is 234 and the maximum is 5678. The minimum generated by rand is 0 and the maximum is 1. Subtract 234 from the number we need?
The minimum number is 234 - 234 = 0, and the maximum number is 5678 - 234 = 5444; Hey, highlight, the minimum number we need is consistent with the minimum generated by rand.
We only need to let the function generate random numbers from 0 to 5444, and then add 234 to it, which is our original requirement.
Our original requirement can be described using a pseudo-expression, it will be
Rounding(rand(0,5444) + 234)
2. Now we just need to find a way to change our needs so that the minimum number remains unchanged at 0 and the maximum number changes to 1,
Obviously, 5444 minus 5443 is 1, but in this case, the minimum number will be a negative number.
The minimum number is still 0, and the maximum number is 1. It’s too simple, 5444 / 5444 = 1, 0 /5444 = 0
Now, the pseudo-expression of the original requirement is:
Rounding (rand(0,1) * 5444 + 234)
3. Remove the parameters of the pseudo expression and write it in the same way as rand under mysql, with the same effect. For the rounding function we use ROUND
Therefore, the final true mysql expression of our original requirement is
ROUND(RAND() * 5444 + 234)
To summarize the ideas:
1. Compare the difference between rand(x, y) and rand(0,1).
2. Gradually transform rand(x,y) to 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
This is a very simple mathematical arithmetic formula. Using a simple example, I will talk about some basic techniques of algorithms: reduce the requirements so that the knowledge you have can meet the needs.