Melanger les résultats d'une requête Mysql
Voici une astuce intéressante qui permet de mélanger de façon aléatoire les résultats d'une requête Mysql. Pour ce faire, il suffit de rajouter la clause Order By suivante :
SELECT champ1, champ 2 FROM maTable ORDER BY Rand();
Ce système évite notamment de coder son propre algorithme de mélange des résultats (utilisation de la fonction random par exemple), ici c'est le serveur Mysql qui s'en charge.
6 Commentaires pour "Melanger les résultats d'une requête Mysql"
Flux des commentaires de cet article Ajouter un commentaireAstuce intéressante, c'est noté
Euh, ça marche que pour Mysql 5, non ?
@Huges : je ne sais pas trop, j'ai mis en place cette astuce sur un mysql 5.0.x.
En revanche, je crois qu'il faut bein faire attention à respecter la majuscule de la fonction Rand (j'avais vu cela quelque part).
J'ai trouvé cela sur le site de mysql :
En MySQL version 3.23.x, vous pouvez faire :
SELECT champ1 FROM table ORDER BY RAND();
Sinon, j'ai vu que l'on pouvais également mettre un nombre entre les parenthèses.
Astuce completement inutile dans la mesure ou la fonction rand() sera appelé à chaque ligne.
donc dès que votre table contient plus de 1000 lignes, le select va manger tout votre cpu....
@Fneufneu : l'utilisation de la fonction rand se fait au niveau de l'ORDER BY et non pas au niveau du SELECT. Le serveur MySQL fait donc le SELECT en premier et met en place un table temporaire des résultats. Le tri (Order by) se fait ensuite dans un deuxième temps sur cette table temporaire et n'affecte donc pas les ressources système pour autant.