首页  >  文章  >  数据库  >  如何在MySQL中生成一定范围内的随机值?

如何在MySQL中生成一定范围内的随机值?

Susan Sarandon
Susan Sarandon原创
2024-10-26 06:56:30165浏览

How to Generate Random Values Within a Range in MySQL?

在 MySQL 中获取一定范围内的随机值

简介

在使用 MySQL 时,可能会遇到需要生成随机值的情况落在指定范围内的值。虽然 RAND() 函数存在,但它不能满足此要求。本文深入探讨了在 MySQL 中实现此目的的最佳方法。

解决方案:

MySQL 中生成指定范围内的随机值的最佳方法是:

ROUND((RAND() * (max-min))+min)
  • RAND():生成 0 到 1 之间的随机数。
  • max:所需范围的最大值。
  • min:所需范围的最小值。

此公式将 RAND() 乘以 max 和 min 之间的差值,并将 min 添加到结果中。 ROUND() 用于获取整数值。

与 PHP 实现的比较:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn