Maison > base de données > tutoriel mysql > Comment sélectionner efficacement des lignes aléatoires dans une table MySQL sans ORDER BY RAND() ?

Comment sélectionner efficacement des lignes aléatoires dans une table MySQL sans ORDER BY RAND() ?

Linda Hamilton
Libérer: 2024-12-04 13:39:10
original
300 Les gens l'ont consulté

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

Utiliser MySQL pour sélectionner des lignes aléatoires

Question :

Comment sélectionner efficacement un nombre spécifié de lignes aléatoires dans un grande table sans utiliser l'ORDER BY RAND() potentiellement gourmand en ressources méthode ?

Réponse :

Solution MySQL :

Pour sélectionner X lignes aléatoires de la classe "une" sans utiliser ORDER 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;
Copier après la connexion

Cette approche consiste à définir un décalage aléatoire en fonction de la taille de la table et à l'utiliser pour récupérer le nombre de lignes souhaité.

Solution PHP :

Si vous utilisez PHP, vous pouvez mettre en œuvre les étapes suivantes pour obtenir le même résultat :

<?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();
?>
Copier après la connexion

Ce code détermine un décalage aléatoire dans le nombre de lignes de la table et l'utilise pour sélectionner le nombre spécifié de lignes aléatoires via une requête LIMIT et OFFSET.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal