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

Susan Sarandon
发布: 2024-10-26 06:56:30
原创
164 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!