Il y a des moments où vous pourriez avoir besoin d’ordonner de façon aléatoire un ensemble de résultats MySQL, par exemple pour choisir quelques gagnants au hasard pour un tirage au sort. Ce post examine comment vous pourriez le faire et le prochain post MySQL examinera l’ordre “aléatoire” des données sur plusieurs pages.
En reprenant l’exemple du tirage au sort, disons que nous avons mené une enquête et que nous allions donner un prix à 10 des personnes qui ont répondu à l’enquête. Ces personnes doivent être choisies au hasard. La table s’appelle “enquête” et nous voulons leurs coordonnées.
Pour sélectionner 10 enregistrements de la table dans un ordre aléatoire, faites ce qui suit :
SELECT first_name, last_name, email_address, phoneFROM surveyORDER BY RAND()LIMIT 10
La ligne ORDER BY RAND() est ce qui rend le jeu de résultats aléatoire, et la ligne LIMIT 10 renvoie seulement les 10 premiers résultats.
Ranger un ensemble de résultats de manière aléatoire de cette façon est inefficace et sera lent sur les grands ensembles de résultats, car le nombre aléatoire doit être appliqué à chaque ligne avant d’être trié. Pour choisir un gagnant ou d’autres circonstances similaires, c’est génial mais ce n’est pas si utile si vous avez besoin de paginer des résultats “aléatoires” sur plusieurs pages.
Si vous avez besoin de paginer des données “aléatoirement” en utilisant RAND() n’est pas très utile car les mêmes enregistrements apparaîtront sur plusieurs pages, et vous n’obtiendrez pas un ensemble de données cohérent lorsque vous paginez en avant et en arrière sur les mêmes pages. Je verrai comment faire dans l’article MySQL de la semaine prochaine. Assurez-vous de vous abonner à mon flux RSS (détails ci-dessous) pour ne pas le manquer.