Heim >Datenbank >MySQL-Tutorial >Wie wählt man effizient zufällige Zeilen aus einer MySQL-Tabelle ohne ORDER BY RAND() aus?

Wie wählt man effizient zufällige Zeilen aus einer MySQL-Tabelle ohne ORDER BY RAND() aus?

Linda Hamilton
Linda HamiltonOriginal
2024-12-04 13:39:10300Durchsuche

How to Efficiently Select Random Rows from a MySQL Table Without ORDER BY RAND()?

Mit MySQL zufällige Zeilen auswählen

Frage:

Wie wählt man effizient eine bestimmte Anzahl zufälliger Zeilen aus a aus? große Tabelle ohne Verwendung des möglicherweise ressourcenintensiven ORDER BY RAND() Methode?

Antwort:

MySQL-Lösung:

Um X zufällige Zeilen aus der Klasse „eins“ auszuwählen, ohne ORDER zu verwenden BY RAND():

SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

Bei diesem Ansatz wird ein zufälliger Offset basierend auf der Tabellengröße festgelegt und zum Abrufen verwendet gewünschte Anzahl von Zeilen.

PHP-Lösung:

Wenn Sie PHP verwenden, können Sie die folgenden Schritte implementieren, um das gleiche Ergebnis zu erzielen:

<?php
$mysqli->begin_transaction();
$result = $mysqli->query("SELECT COUNT(*) FROM mytable");
$row = $result->fetch_row(); 
$count = $row[0]; 
$offset = mt_rand(0, $count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...
$mysqli->commit();
?>

Dieser Code ermittelt einen zufälligen Offset innerhalb der Zeilenanzahl der Tabelle und verwendet ihn, um die angegebene Anzahl zufälliger Zeilen über eine LIMIT- und OFFSET-Abfrage auszuwählen.

Das obige ist der detaillierte Inhalt vonWie wählt man effizient zufällige Zeilen aus einer MySQL-Tabelle ohne ORDER BY RAND() aus?. 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