J'ai lu que ce n'est pas une bonne idée d'exécuter des requêtes SQL avec ORDER BY RAND() sur de grandes bases de données.Random Records Mysql PHP
Alors, voici ma chance de casser le code. Le code doit sélectionner 10 identifiants aléatoires dans la base de données, puis sélectionner une seconde pour saisir les lignes aléatoires.
$sql = "SELECT id FROM table WHERE image != ''
ORDER BY id DESC LIMIT 50;";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
foreach($row as $key => $value)
{
$array[] = $value;
}
}
$rand_keys = array_rand($array, 10);
foreach($rand_keys as $value)
{
$rand_arr[] = $array[$value];
}
$rand_list = implode("," , $rand_arr);
$sql = "SELECT image FROM table
WHERE image != ''
AND id IN ($rand_list)";
$result = mysql_query($sql);
Des suggestions pour accélérer ou simplifier?
J'éviterais vraiment 'order by rand()' comme une habitude générale. J'ai vu cela grind occupé tables MyISAM de seulement quelques centaines de milliers de lignes. –
Allez maintenant Dominic. # 3 et # 4 sont des erreurs typo évidentes/idées négligées. Mon erreur. # 5 était très utile. # 2 est dans mon esprit. Je cours ce code sur un serveur partagé et il a arrêté mon site Web (même effet avec ORDER BY rand() réellement.) Cela m'a incité à repenser complètement les rangées aléatoires, c.-à-d. servant des images aléatoires. – rrrfusco