[MySQL] tirage aléatoire via ORDER BY rand()


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 18964
Inscription: 19 Avr 2002

[MySQL] tirage aléatoire via ORDER BY rand()

Message le Sam Sep 04, 2004 21:44

je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classique
Code: Tout sélectionner
ORDER BY RAND()
mais malheureusement les résultats semblent toujours affichés dans le même ordre, même si je relance la requête.

y a-t-il une histoire d'initialiation du random ?
ai-je raté un truc ?

merci...


lou
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 477
Inscription: 9 Mai 2004

Message le Sam Sep 04, 2004 21:46

bah nan ça devrai marcher...


Gaëtan R.
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 311
Inscription: 26 Avr 2004

Message le Sam Sep 04, 2004 21:50

Ben, moi je vois pas ce qui peut clocher, j'utilise le ORDER BY Rand() de cette façon.

Sauf que moi j'écris ORDER BY Rand(), ça a peut être une importance de mettre la majuscule en début et minuscules après.

squawk
WRInaute accro
WRInaute accro
 
Messages: 5985
Inscription: 22 Mar 2004

Message le Sam Sep 04, 2004 22:07

Faut peut etre mettre un chiffre dans la parenthèse ?

troops
WRInaute impliqué
WRInaute impliqué
 
Messages: 807
Inscription: 16 Mar 2003

Message le Sam Sep 04, 2004 22:10

SELECT * FROM tbl_name ORDER BY RAND() LIMIT 1

Un exemple qui marche


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 18964
Inscription: 19 Avr 2002

Message le Sam Sep 04, 2004 22:33

j'ai fait plusieurs tests et je n'ai toujours pas compris ce qui cloche : selon la complexité de la clause WHERE, l'ordre des résultats est aléatoire ou constant

donc effectivement troops, pour des requêtes comme ton exemple ça marche
mais pour une requête avec notamment 4 conditions (séparées par AND) ça ne marche pas (l'ordre est toujours le même)


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: 14 Oct 2002

Message le Sam Sep 04, 2004 22:52

tu veux dire qu'il affiche toujours la meme chose ? 8O
je viens de lancer ceci chez moi
Code: Tout sélectionner
SELECT champ1,champ2 from psn_maboutique_prod where active=1 and (cid=3 or cid=4) and prixsupp=0 and exposer=0 ORDER BY RAND() LIMIT 7


et ca me sort 7 élements différents a chaque fois.. la table fait 100 enregistrements.

troops
WRInaute impliqué
WRInaute impliqué
 
Messages: 807
Inscription: 16 Mar 2003

Message le Sam Sep 04, 2004 22:57

Montre ta requete, modifie juste le nom des champs et table pour la "confidentialité" que je vois ça


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 18964
Inscription: 19 Avr 2002

Message le Sam Sep 04, 2004 23:00

oui, toujours la meme chose...
j'ai résolu le pb en mettant rand() as hasard dans la liste des SELECT et en triant par ORDER BY hasard

bizarre


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: 14 Oct 2002

Message le Sam Sep 04, 2004 23:04

un paramétrage de mysql peut etre ?


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Dim Sep 05, 2004 0:44

WebRankInfo a écrit:oui, toujours la meme chose...
j'ai résolu le pb en mettant rand() as hasard dans la liste des SELECT et en triant par ORDER BY hasard

bizarre


curieux, parce que la doc dit exactement le contraire :?


Bobez
WRInaute impliqué
WRInaute impliqué
 
Messages: 716
Inscription: 20 Mai 2004

Message le Dim Sep 05, 2004 3:59

Essaye qqchose comme ça peut-être (pas testé) :

Code: Tout sélectionner
("SELECT * FROM table ORDER BY rand(" . time() . " * " . time() . ") LIMIT 3");


ysimon
WRInaute discret
WRInaute discret
 
Messages: 153
Inscription: 24 Fév 2004

Re: [MySQL] tirage aléatoire via ORDER BY rand()

Message le Dim Sep 05, 2004 8:43

WebRankInfo a écrit:je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classique
Code: Tout sélectionner
ORDER BY RAND()
mais malheureusement les résultats semblent toujours affichés dans le même ordre, même si je relance la requête.

y a-t-il une histoire d'initialiation du random ?
ai-je raté un truc ?

merci...


et bien pour moi, c'est normal

rand() renvoit un seul nombre

ca fait donc un truc style select * from table order by 0,5

la methode que tu as choisie apres, cad, celle de mettre un nombre rand différent pour chaque ligne est meilleure.

verifie bien que les rand sont différents d'un select à un autre ;-)


malango
WRInaute discret
WRInaute discret
 
Messages: 89
Inscription: 14 Oct 2003

Re: [MySQL] tirage aléatoire via ORDER BY rand()

Message le Mer Fév 16, 2005 19:16

WebRankInfo a écrit:je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classique
Code: Tout sélectionner
ORDER BY RAND()
mais malheureusement les résultats semblent toujours affichés dans le même ordre, même si je relance la requête.

y a-t-il une histoire d'initialiation du random ?
ai-je raté un truc ?

merci...

J'arrive peut-être après la bataille mais comme je n'ai pas vue de vraie solution, je mets mon grain de sel.
J'utilisais cette fonction avec succès jusqu'à il y a peu de temps.
El local, elle marche parfaitement.
J'en suis arrivé à la conclusion qu'il s'agissait probablement d'un changement arrivé avec MySql 5.
J'ai cherché des infos (chez Nexen notamment) sans succès sur un eventuel changement de comportement... Peut-être faut-il ajouter un argument du style rand(n) ou rand(n1,n2)...
C'était histoire de relancer l'affaire si quelqu'un a trouvé the solution...

xpertiz
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 1
Inscription: 4 Jan 2005

Message le Mar Aoû 09, 2005 13:09

Bonjour à tous, je pense que le () du rand correspond à la seed.

En fait il est impossible de modéliser l'aléatoire. Par définition on peut pas le faire, car cela est seulement réalisé par la nature, il faut donc fournir à votre fonction rand une graine pour qu'il puisse asseoir son processus pseudo aléatoire. La plupart du temps on prend la date ou l'heure...

Salutations

[MySQL] tirage aléatoire via ORDER  BY rand()

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: zeb et 0 invités