comment fonctionne ORDER BY RAND() ?

comment fonctionne ORDER BY RAND() ? - SQL/NoSQL - Programmation

Marsh Posté le 28-09-2010 à 16:48:54    

Bonjour,
 
J'ai lu sur plusieurs sites que faire des "ORDER BY RAND()" n'était pas conseillé niveau performances, mais malgré que j'ai à peu près compris ce que ça fait, je n'arrive pas à comprendre comment cette fonction fonctionne ( :o ).
De ce que j'ai compris, RAND() renvoit un float entre 0 et 1. D'un autre côté et toujours d'après mes (maigres) connaissances, après un ORDER BY on attend soit le nom d'une colonne, soit un entier qui correspondra au numéro d'une colonne. Je ne comprends donc pas ce qu'un float entre 0 et 1 vient faire là-dedans.
Merci pour toute explication :)


---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Marsh Posté le 28-09-2010 à 16:48:54   

Reply

Marsh Posté le 28-09-2010 à 16:59:11    

salut,
 
ca peut servir à mélanger les résultats...
 
++

Reply

Marsh Posté le 28-09-2010 à 17:11:52    

oui je sais bien que ça sert à ça, la question est plutôt de savoir comment ça marche...


---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Marsh Posté le 28-09-2010 à 17:15:16    

ben ca génère un nombre aléatoire pour chaque ligne, et ca trie selon ce chiffre... tu dis que order by attends un nom de colonne ou un entier... je ne vois pas pourquoi ce ne serait pas un float.

Message cité 1 fois
Message édité par pataluc le 28-09-2010 à 17:16:12
Reply

Marsh Posté le 28-09-2010 à 17:23:24    

pataluc a écrit :

tu dis que order by attends un nom de colonne ou un entier... je ne vois pas pourquoi ce ne serait pas un float.

 

parce que (toujours d'après ce que j'ai compris), quand on lui fournit un entier, par exemple 2, ça trie le résultat suivant la deuxième colonne. Dans cette optique, je ne comprends pas bien ce que peut vouloir dire trier selon la 0.12303371180131ème colonne par exemple.


Message édité par Misssardonik le 28-09-2010 à 17:23:37

---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Marsh Posté le 28-09-2010 à 17:29:01    

oui, mais la tu ne trie pas selon un entier, mais selon un critère qui est rand(). rand() se comporte comme un nom de colonne. un nom de colonne qui renvoie des valeurs aléatoires.

Reply

Marsh Posté le 28-09-2010 à 17:38:52    

pataluc a écrit :

oui, mais la tu ne trie pas selon un entier, mais selon un critère qui est rand(). rand() se comporte comme un nom de colonne. un nom de colonne qui renvoie des valeurs aléatoires.


 
tu veux dire une colonne supplémentaire qui ajoute à chaque tuple de la table un nombre aléatoire ? je veux bien croire que ça fasse ça, mais est-ce documenté quelque part ? d'après toutes les définitions de RAND et de ORDER BY que j'ai pû trouver, rien ne laisse penser qu'on peut s'en servir de cette manière, c'est ça qui me gène...  
En fait la question que je me pose c'est : qui a eu l'idée en premier d'utiliser ORDER BY avec RAND(), et comment a t-il eu l'idée ?


---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Marsh Posté le 28-09-2010 à 17:42:15    

http://dev.mysql.com/doc/refman/5. [...] ction_rand
 
si ca:

Code :
  1. SELECT champ1
  2. FROM table1
  3. ORDER BY rand()

ca te parait pas clair, est-ce que ca:

Code :
  1. SELECT champ1, rand() AS alea
  2. FROM table1
  3. ORDER BY alea

c'est mieux? parce que c'est la même chose (ou presque).

Reply

Marsh Posté le 29-09-2010 à 13:26:06    

oui ok ça me paraît plus clair écrit comme ça, merci :)


---------------
Que va-t-il se passer cette gelgamar ? vous le découvrirez janamont à 20h
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed