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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 15905
Inscription: Ven Avr 19, 2002 19:51

[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 impliqué
WRInaute impliqué
 
Messages: 477
Inscription: Dim Mai 09, 2004 17:59

Message le Sam Sep 04, 2004 21:46

bah nan ça devrai marcher...


Gaëtan R.
WRInaute impliqué
WRInaute impliqué
 
Messages: 311
Inscription: Lun Avr 26, 2004 16:24

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: Lun Mar 22, 2004 19:45

Message le Sam Sep 04, 2004 22:07

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

troops
WRInaute passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

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: 15905
Inscription: Ven Avr 19, 2002 19:51

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: Lun Oct 14, 2002 10:00

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 passionné
WRInaute passionné
 
Messages: 807
Inscription: Dim Mar 16, 2003 11:23

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: 15905
Inscription: Ven Avr 19, 2002 19:51

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: Lun Oct 14, 2002 10:00

Message le Sam Sep 04, 2004 23:04

un paramétrage de mysql peut etre ?


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

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 passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

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 occasionnel
WRInaute occasionnel
 
Messages: 144
Inscription: Mar Fév 24, 2004 14:07

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: Mar Oct 14, 2003 7:51

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
 
Messages: 1
Inscription: Mar Jan 04, 2005 18:51

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()

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Marie-Aude et 0 invités