首頁  >  文章  >  資料庫  >  如何在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()
  • RAND()
  • RAND()
  • RAND()
  • :產生0 到1 之間的隨機數。
  • max
:所需範圍的最大值。

min

:所需範圍的最小值。

<code class="php">rand($min, $max)</code>
此公式將 RAND() 乘以 max 和 min 之間的差值,並將 min 加到結果中。 ROUND() 用來取得整數值。

與PHP 實現的比較:

MySQL 解決方案的PHP 等效項是:

<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>
但是,基準測試有顯示MySQL 解決方案在處理大量值時稍快一些。 PHP 和 MySQL 之間的選擇取決於正在處理的行數以及是否只需要隨機值或將傳回附加列。

範例查詢

取得10 之間的隨機值和200:
<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>

附錄:效能比較為了進一步說明效能差異,執行了以下PHP 腳本:結果顯示MySQL如果只需要隨機值,則產生隨機值會更快,但如果傳回其他列,則產生隨機值會更慢。

以上是如何在MySQL中產生一定範圍內的隨機值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn