sortie de select aleatoire

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 juin 2005, 11:07

Si il est possible de faire ORDER BY RAND(), c'est beaucoup plus optimisé

Tant qu'on peut déleguer les opérations à MySQL, il faut en profiter

C'est peut être pas évident sur une petite opération, mais ça peut se remarquer
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

13 juin 2005, 11:18

La syntaxe que j'ai indiquée plus haut provient de la documentation rédigée par MySQL AB.
J'en ai eu connaissance lors de la formation MySQL que j'ai suivie, il y a 2 mois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 juin 2005, 11:22

Je te fait confiance Albat

Je disais juste "s'il est possible" car dans la doc, on ne peut utiliser cette syntaxe que a partir de MySQL 3.23
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

13 juin 2005, 11:23

...Je disais juste "s'il est possible" car dans la doc, on ne peut utiliser cette syntaxe que a partir de MySQL 3.23
Tu connais beaucoup de serveur qui n'en sont encore qu'à une versions antérieure à 3.23 ? :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 juin 2005, 11:28

Depuis que je fait de l'informatique, je part toujours du fait que tant que ce n'est pas impossible, c'est possible

Ca me pose parfois de gros problème mais ça m'aide souvent
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juin 2005, 11:28

Je te fait confiance Albat

Je disais juste "s'il est possible" car dans la doc, on ne peut utiliser cette syntaxe que a partir de MySQL 3.23
As-tu essayé au moins?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 juin 2005, 12:54

Et pourquoi ça ne serait pas possible ?
En fait c'est logique de faire un ORDER BY RAND() : car SQL peut faire le tri par n° de colonne et RAND() ici lui fournit un n° de colonne par hasard, le SELECT retourne alors le même lot de données trié à chaque fois selon une de ses colonnes : Ce qui donne des résultats organisés au hasard.
Mais ça ne va pas marcher si le lot retourné contient seulement une colonne.
Modifié en dernier par sadeq le 13 juin 2005, 13:08, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 juin 2005, 12:58

Et pourquoi ça ne serait pas possible ?
En fait c'est logique de faire un ORDER BY RAND() : car SQL peut faire le tri par n° de colonne et RAND() ici lui fournit un n° de colonne par hasard, le SELECT retourne alors le même lot de données trié à chaque fois selon une de ses colonne : Ce qui donne des résultats organisés au hasard.
Mais ça ne va pas marcher si le lot reourné contient seulement une colonne.
'vache ! Je viens enfin de comprendre ce qui se cachait derrière cette fichue syntaxe !
Je note :)

Mammouth du PHP | 19672 Messages

13 juin 2005, 13:14

Ça je dois avouer que je ne le savais pas non plus et en fait, ce n'est pas aussi clair dans le manuel... :-k Faut que je teste...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

13 juin 2005, 13:18

Rectification, c'est faux ce truc sur une seule colonne: je viens de tester avec une base de codes postaux où j'ai toutes les communes de France: j'ai fait ceci:

Code : Tout sélectionner

SELECT `commune` FROM `villes_france` ORDER BY RAND() LIMIT 0,20;
J'exécute plusieurs fois de suite et je n'ai jamais deux fois la même série: sur plus de 30000 entrées, il y a 20 noms de commune pris au hasard...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juin 2005, 14:07

Rectification, c'est faux ce truc sur une seule colonne: je viens de tester avec une base de codes postaux où j'ai toutes les communes de France: j'ai fait ceci:

Code : Tout sélectionner

SELECT `commune` FROM `villes_france` ORDER BY RAND() LIMIT 0,20;
J'exécute plusieurs fois de suite et je n'ai jamais deux fois la même série: sur plus de 30000 entrées, il y a 20 noms de commune pris au hasard...
Mais là, tu lui demandes par exemple :
SELECT commune FROM villes_france ORDER BY 3.25
Que fait-il alors ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 juin 2005, 14:09

Je te fait confiance Albat

Je disais juste "s'il est possible" car dans la doc, on ne peut utiliser cette syntaxe que a partir de MySQL 3.23
As-tu essayé au moins?
J'ai vraiment l'impression qu'on tourne en rond

Je m'explique

Dans la doc, j'ai lu qu'on ne pouvait utiliser cette syntaxe que à partir de MySQL 3.23. N'ayant pas testé cette syntaxe et partant du fait que tant qu'il reste des serveurs MySQL < 3.23, je n'accepte pas cette syntaxe sans réflechir. d'où le "s'il est possible"

J'espère avoir réussi à éclaircir ma déclaration
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 44 Messages

13 juin 2005, 14:43

merci c'est exactement ça que je cherchais
je ne connaissais pas du tout

merci beaucoup a vous

Mammouth du PHP | 19672 Messages

13 juin 2005, 15:43

Mais là, tu lui demandes par exemple :
SELECT commune FROM villes_france ORDER BY 3.25
Que fait-il alors ?
Résultat:
38958 rows fetched in 0,8027s (0,0046s)
Et j'ai en fait toutes les communes dans l'ordre alphabétique... j'avoue qu'un truc m'échappe dans ton interrogation mere-teresa :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

13 juin 2005, 16:13

Ben je comprends pas ce que fait MySQL quand tu lui demandes ORDER BY .025
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.