使用MySQL 時,可能會遇到需要產生隨機值的情況落在指定範圍內的值。雖然 RAND() 函數存在,但它不能滿足此要求。本文深入探討了在 MySQL 中實現此目的的最佳方法。
MySQL 中產生指定範圍內的隨機值的最佳方法是:
ROUND((RAND() * (max-min))+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中文網其他相關文章!