Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Nilai Rawak Dalam Julat dalam MySQL?
Apabila bekerja dengan MySQL, mungkin terdapat keadaan di mana anda perlu menjana rawak nilai yang berada dalam julat yang ditentukan. Walaupun fungsi RAND() wujud, ia tidak memenuhi keperluan ini. Artikel ini membincangkan pendekatan terbaik untuk mencapai ini dalam MySQL.
Kaedah optimum dalam MySQL untuk menjana nilai rawak dalam julat yang ditentukan ialah:
ROUND((RAND() * (max-min))+min)
Formula ini mendarab RAND() dengan perbezaan antara maks dan min, menambahkan min pada hasil. ROUND() digunakan untuk mendapatkan nilai integer.
Persamaan PHP bagi penyelesaian MySQL ialah:
<code class="php">rand($min, $max)</code>
Walau bagaimanapun, penanda aras mempunyai menunjukkan bahawa penyelesaian MySQL sedikit lebih pantas apabila berurusan dengan sejumlah besar nilai. Pilihan antara PHP dan MySQL bergantung pada bilangan baris yang sedang diproses dan sama ada hanya nilai rawak diperlukan atau lajur tambahan akan dikembalikan.
Untuk mendapatkan nilai rawak antara 10 dan 200:
<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>
Untuk menggambarkan lagi perbezaan prestasi, skrip PHP berikut telah dijalankan:
<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>
Hasilnya menunjukkan bahawa MySQL adalah lebih pantas untuk menjana nilai rawak jika hanya nilai rawak diperlukan, tetapi lebih perlahan jika lajur tambahan dikembalikan.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nilai Rawak Dalam Julat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!