Vous ne pouvez pas utiliser une colonne avec une valeur RAND() dans une clause ORDER BY car ORDER BY recalculera la colonne plusieurs fois. Cependant, dans MySQL3.23, vous pouvez faire : SELECT * FROM table_name ORDER BY RAND(), ce qui est utile pour obtenir un SELECT * FROM table1,table2 WHERE a=b AND c pour obtenir le caractère aléatoire. J'ai trouvé ce qui suit dans le manuel. Déclaration pour terminer la tâche :
SELECT * FROM nom_table ORDER BY rand() LIMIT 5;
Rand dit ceci dans le manuel : :
RAND()
RAND(N)
Renvoie une valeur aléatoire à virgule flottante comprise entre 0 et 1,0. Si un paramètre entier N est spécifié, il est utilisé comme valeur de départ.
mysql> sélectionnez RAND();
-> 0,5925
mysql> sélectionnez RAND(20);
-> 0,1811
mysql> sélectionnez RAND(20);
-> 0,1811
mysql> sélectionnez RAND();
-> 0,2079
mysql> sélectionnez RAND();
-> 0,7888
Vous ne pouvez pas utiliser une colonne avec une valeur RAND() dans une clause ORDER BY car ORDER BY recalculera la colonne plusieurs fois. Cependant, dans MySQL 3.23, vous pouvez faire : SELECT * FROM table_name ORDER BY RAND(), ce qui est utile pour obtenir un SELECT * FROM table1,table2 WHERE a=b AND c
Notez qu'un RAND() dans une clause WHERE sera réévalué à chaque fois que WHERE est exécuté.
Mais je l'ai essayé pour une table de 8 000 enregistrements, l'exécution prend 0,08 seconde, ce qui est un peu lent. Plus tard, j'ai consulté Google et j'ai obtenu le code suivant :
SELECT * FROM nom_table AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM nom_table)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
L'efficacité d'exécution nécessite 0,02 seconde Malheureusement, seul MySQL 4.1.* et supérieur prend en charge de telles sous-requêtes.