在使用 MySQL 时,可能会遇到需要生成随机值的情况落在指定范围内的值。虽然 RAND() 函数存在,但它不能满足此要求。本文深入探讨了在 MySQL 中实现此目的的最佳方法。
MySQL 中生成指定范围内的随机值的最佳方法是:
ROUND((RAND() * (max-min))+min)
此公式将 RAND() 乘以 max 和 min 之间的差值,并将 min 添加到结果中。 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中文网其他相关文章!