ホームページ  >  記事  >  データベース  >  MySQLの指定範囲乱数関数 rand()_MySQL の使い方のヒント

MySQLの指定範囲乱数関数 rand()_MySQL の使い方のヒント

WBOY
WBOYオリジナル
2016-10-09 08:33:381680ブラウズ

式は次のとおりです:

rand() * (y-x) + x

PHP を勉強している人なら誰でも、ランダム関数 rand または mt_rand がパラメーターを渡して 0 からパラメーターの間のランダムな整数を生成したり、2 つのパラメーターを渡して 2 つのパラメーター間のランダムな整数を生成したりできることを知っています。
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 を加算することだけです。これが本来の要件です。
元の要件は擬似式を使用して記述することができます。それは
になります。 四捨五入(ランド(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) に徐々に変換します
ランド(x,y)
= ランド(0, (y-x)) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) +x
= rand() * (y-x) + x

これは非常に単純な算術式です。簡単な例を使用して、アルゴリズムの基本的なテクニックについて説明します。要件を減らして、持っている知識でニーズを満たすことができます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。