Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menjana Nilai Rawak Dalam Julat dalam MySQL?

Bagaimana untuk Menjana Nilai Rawak Dalam Julat dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-10-26 06:56:30165semak imbas

How to Generate Random Values Within a Range in MySQL?

Mendapatkan Nilai Rawak Dalam Julat dalam MySQL

Pengenalan

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.

Penyelesaian:

Kaedah optimum dalam MySQL untuk menjana nilai rawak dalam julat yang ditentukan ialah:

ROUND((RAND() * (max-min))+min)
  • RAND(): Menjana nombor rawak antara 0 dan 1.
  • maks: Nilai maksimum julat yang diingini.
  • min: Nilai minimum julat yang diingini.

Formula ini mendarab RAND() dengan perbezaan antara maks dan min, menambahkan min pada hasil. ROUND() digunakan untuk mendapatkan nilai integer.

Perbandingan dengan Pelaksanaan PHP:

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.

Contoh Pertanyaan

Untuk mendapatkan nilai rawak antara 10 dan 200:

<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>

Tambahan: Perbandingan Prestasi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn