sortie de select aleatoire

Mammouth du PHP | 19672 Messages

13 juin 2005, 16:38

Bon, alors supposons que je modifie comme ceci:

Code : Tout sélectionner

SELECT `commune` FROM `villes_france` ORDER BY RAND(25) LIMIT 0,20;
Là, j'aurai une liste aléatoire, mais toujours la même liste à chaque exécution.
RAND() , RAND(N)

Retourne un nombre aléatoire à virgule flottante compris dans l'intervalle 0 - 1.0. Si l'argument entier N est spécifié, il est utilisé comme initialisation du générateur de nombres aléatoires.
RAND() doit utiliser un algorithme bien précis et le fait d'ajouter un paramètre numérique fixera la sortie.

En conclusion, ORDER BY RAND() n'est intéressant si on veut de l'aléatoire basique que sans paramètre.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2005, 09:42

En fait je retire ce que j'ai dit à propos du fonctionnement de rand() dans la clause ORDER BY sous Mysql, pour la simple raison que ce rand() ne désigne pas un n° de colonne existante dans le select puisqu'il génére un nombre flottant entre entre 0.0 et 1.0
Mais en testant la requête :
SELECT *, rand() as hasard FROM table ORDER BY hasard
Je m'apperçois qu'elle fonctionne exactement comme : ORDER BY rand()

Ce qui veut dire qu'un champ temporaire est créé par rand() à la fin de la génération du SELECT pour appliquer le classement final du fichier et rendre le resultat.
Je rappelle que ORDER BY force dans certains cas nécéssaires la création d'un fichier temporaire d'indexation dans le repertoire tmp/ avec l'extension .MYI
Modifié en dernier par sadeq le 14 juin 2005, 09:59, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

14 juin 2005, 09:54

En fait, le random doit être fait en PHP, non ?
Tu mets toutes tes colonnes ordonnables (par un order by) dans un tableau. Et tu demandes un rand sur les index de ton tableau et c'est cette colonne qui va être choisie...

Au fait, ce topic est [Résolu] ? Mais quelle a été la solution choisie ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 44 Messages

14 juin 2005, 20:50

excuse moi voici la solution que j'ai choisi

et ça marche nickel
SELECT `commune` FROM `villes_france` ORDER BY RAND()