Heim  >  Artikel  >  Datenbank  >  Wie generiert man in MySQL Zufallswerte innerhalb eines Bereichs?

Wie generiert man in MySQL Zufallswerte innerhalb eines Bereichs?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 06:56:30165Durchsuche

How to Generate Random Values Within a Range in MySQL?

Erhalten eines Zufallswerts innerhalb eines Bereichs in MySQL

Einführung

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.

Lösung:

Die optimale Methode in MySQL, um einen Zufallswert innerhalb eines bestimmten Bereichs zu generieren, ist:

ROUND((RAND() * (max-min))+min)
  • RAND(): Erzeugt eine Zufallszahl zwischen 0 und 1.
  • max: Maximalwert des gewünschten Bereichs.
  • min: Mindestwert des gewünschten Bereichs.

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.

Vergleich mit PHP-Implementierung:

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.

Beispielabfrage

Um einen Zufallswert zwischen 10 zu erhalten und 200:

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

Nachtrag: Leistungsvergleich

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn