[MySQL] tirage aléatoire via ORDER BY rand()
16 messages
• Page 1 sur 2 • 1, 2
-

WebRankInfo - Administrateur du site

- Messages: 18964
- Inscription: 19 Avr 2002
[MySQL] tirage aléatoire via ORDER BY rand()
je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classique
y a-t-il une histoire d'initialiation du random ?
ai-je raté un truc ?
merci...
j'utilise le classique
- Code: Tout sélectionner
ORDER BY RAND()
y a-t-il une histoire d'initialiation du random ?
ai-je raté un truc ?
merci...
-

WebRankInfo - Administrateur du site

- Messages: 18964
- Inscription: 19 Avr 2002
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)
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

- Messages: 11405
- Inscription: 14 Oct 2002
tu veux dire qu'il affiche toujours la meme chose ?
je viens de lancer ceci chez moi
et ca me sort 7 élements différents a chaque fois.. la table fait 100 enregistrements.
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.
-

WebRankInfo - Administrateur du site

- Messages: 18964
- Inscription: 19 Avr 2002
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
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

- Messages: 11405
- Inscription: 14 Oct 2002
un paramétrage de mysql peut etre ?
-

Bobez - WRInaute impliqué

- Messages: 716
- Inscription: 20 Mai 2004
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

- Messages: 153
- Inscription: 24 Fév 2004
Re: [MySQL] tirage aléatoire via ORDER BY rand()
WebRankInfo a écrit:je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classiquemais malheureusement les résultats semblent toujours affichés dans le même ordre, même si je relance la requête.
- Code: Tout sélectionner
ORDER BY RAND()
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

- Messages: 89
- Inscription: 14 Oct 2003
Re: [MySQL] tirage aléatoire via ORDER BY rand()
WebRankInfo a écrit:je souhaite tirer au sort un des records renvoyés par une requête MySQL
j'utilise le classiquemais malheureusement les résultats semblent toujours affichés dans le même ordre, même si je relance la requête.
- Code: Tout sélectionner
ORDER BY RAND()
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: 4 Jan 2005
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
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
16 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Tirage aléatoire dans une table MySQL (solutions et questions)
- select order by rand(nombre)
- MySQL : ORDER BY qui se comporte comme ORDER BY BINARY !
- tirage aleatoire dans fichier html
- [Résolu] RAND et Mysql
- [php/MySQL] Tirage au sort avec pondération
- Requete MySQL et order
- MYSQL ORDER BY... somme de colonnes
- [MySQL] instruction order by dans un champ alphanumérique
- Mysql faire un order by sur une partie d'un champ [RESOLU]
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Mon site est-il dans la SandBox ? Guide pratique... - 12-01-2006
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- WebRankInfo lance la publicité collaborative - 15-10-2004
- Quiz référencement : algorithmes des moteurs - 07-09-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Référencement : le problème des sessions des pages PHP - 04-08-2008
Qui est en ligne
Utilisateurs parcourant ce forum: zeb et 0 invités



