Bei der Arbeit mit MySQL kann es Fälle geben, in denen Sie einen Zufallswert generieren müssen Wert, der innerhalb eines angegebenen Bereichs liegt. Obwohl die Funktion RAND() existiert, erfüllt sie diese Anforderung nicht. Dieser Artikel befasst sich mit dem besten Ansatz, um dies in MySQL zu erreichen.
Die optimale Methode in MySQL, um einen Zufallswert innerhalb eines bestimmten Bereichs zu generieren, ist:
ROUND((RAND() * (max-min))+min)
Diese Formel multipliziert RAND() mit der Differenz zwischen max und min und addiert min zum Ergebnis. ROUND() wird angewendet, um einen ganzzahligen Wert zu erhalten.
Das PHP-Äquivalent der MySQL-Lösung ist:
<code class="php">rand($min, $max)</code>
Benchmarks haben jedoch hat gezeigt, dass die MySQL-Lösung bei der Verarbeitung einer großen Anzahl von Werten etwas schneller ist. Die Wahl zwischen PHP und MySQL hängt von der Anzahl der verarbeiteten Zeilen ab und davon, ob nur der Zufallswert benötigt wird oder zusätzliche Spalten zurückgegeben werden.
Um einen Zufallswert zwischen 10 zu erhalten und 200:
<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>
Um die Leistungsunterschiede weiter zu veranschaulichen, wurde das folgende PHP-Skript ausgeführt:
<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>
Die Ergebnisse zeigen, dass MySQL ist schneller für die Generierung von Zufallswerten, wenn nur der Zufallswert benötigt wird, aber langsamer, wenn zusätzliche Spalten zurückgegeben werden.
Das obige ist der detaillierte Inhalt vonWie generiert man in MySQL Zufallswerte innerhalb eines Bereichs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!