MySQL を使用する場合、ランダムな値を生成する必要がある場合があります。指定された範囲内の値。 RAND() 関数は存在しますが、この要件は満たしていません。この記事では、MySQL でこれを実現するための最適なアプローチについて詳しく説明します。
MySQL で指定された範囲内でランダムな値を生成する最適な方法は次のとおりです:
ROUND((RAND() * (max-min))+min)
この数式は、RAND() に最大と最小の差を乗算し、結果に最小を加算します。 ROUND() は整数値を取得するために適用されます。
MySQL ソリューションに相当する PHP は次のとおりです:
<code class="php">rand($min, $max)</code>
ただし、ベンチマークは多数の値を処理する場合、MySQL ソリューションの方がわずかに高速であることが示されています。 PHP と MySQL のどちらを選択するかは、処理される行の数と、ランダムな値のみが必要か、それとも追加の列が返されるかによって決まります。
10 の間のランダムな値を取得するにはおよび 200:
<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>
パフォーマンスの違いをさらに説明するために、次の PHP スクリプトを実行しました。
<code class="php">// MySQL $start = microtime(1); for( $i = 0; $i < 100000; $i++ ) { $r = mysql_query( 'SELECT ROUND(RAND() * (200-10) + 10) FROM dual' ); $r = mysql_fetch_array( $r ); } $end = microtime(1); // PHP $start = microtime(1); for( $i = 0; $i < 100000; $i++ ) { $r = mysql_query( 'SELECT 200 AS two, 10 AS tem FROM dual' ); $r = mysql_fetch_array( $r ); $r[2]= rand($r[0], $r[1]); } $end = microtime(1);</code>
結果は、MySQLランダムな値のみが必要な場合は、ランダムな値を生成する方が高速ですが、追加の列が返される場合は遅くなります。
以上がMySQL で範囲内のランダムな値を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。