Heim >Datenbank >MySQL-Tutorial >Wie wählt man effizient zufällige Zeilen aus einer MySQL-Tabelle ohne ORDER BY RAND() aus?
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!