Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
940 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] sélection aléatoire d'enregistrement en fonction de ....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] sélection aléatoire d'enregistrement en fonction de ....

n°1131486
docwario
Alea jacta est
Posté le 26-06-2005 à 20:19:08  profilanswer
 

Salut all,
 
Avant toute chose, je connais déjà : ORDER BY RAND() LIMIT 1.
 
J'ai un petit problème pour sélectionner aléatoirement un enregistrement :  
 
J'aimerais récupérer une image aléatoire d'une oeuvre appartenant à une collection.
Pour être plus clair, je veux afficher une liste de collection avec une image aléatoire appartenant à la collection en question.
 
-> collection 1 : image143
-> collection 2 : image432
-> etc...
 
ma requete actuelle :

Code :
  1. select distinct collection.*, images.nom
  2. from collection inner join oeuvres on collection.id_collection = oeuvres.id_collection
  3. inner join images on oeuvres.id_oeuvre = images.id_oeuvre
  4. group by collection.id_collection


 
Cette requete m'affiche bien toutes les collections mais m'affiche la première image trouvée en rapport avec la collection.
si je rajouter 'order by rand() limit 1', ben...j'ai plus qu'une collection.
si j'enleve le 'group by' pour le remplacer par 'order by rand()' - sans limit - j'ai toutes les images de la collection.
 
Savez vous comment je pourrais :
- avoir toute la liste des collection
- selectionner une oeuvre de la collection au hasard
- selectionner une image de cette oeuvre au hasard
 
en gros, la même chose que ma requête sauf que l'image serait aléatoire...
 
si ca peut aider :
collection(1,N) - (1,1)oeuvres(1,N) - (1,1)images
 
merci

mood
Publicité
Posté le 26-06-2005 à 20:19:08  profilanswer
 

n°1131670
Arjuna
Aircraft Ident.: F-MBSD
Posté le 26-06-2005 à 23:09:38  profilanswer
 

Si t'as une version récente de MySQL, et si MySQL supporte les ORDER BY et LIMIT dans des sous requêtes, tu peux tenter : (faut pas avoir peur, c'est aussi rapide qu'une jointure normale)
 

Code :
  1. select c.*, (select i.nom from images i where i.id_collection = c.id_collection order by rand() limit 1)
  2. from collection c
  3. order by collection.nom


 
A supposer que le "RAND()" fonctionne correctement sous SQL Server (ce qui n'est pas le cas), ça marcherait. Par contre, Oracle n'aime pas les ORDER BY dans les sous requêtes. Donc c'est qu'une question de pot...
 
Si ça marche pas, je crains que tu ne sois obligé de faire ça avec une boucle.


Message édité par Arjuna le 26-06-2005 à 23:12:12
n°1138444
docwario
Alea jacta est
Posté le 03-07-2005 à 00:38:29  profilanswer
 

merci, ca marche terrible ton truc !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] sélection aléatoire d'enregistrement en fonction de ....

 

Sujets relatifs
reconf apache+php+mysql après réinstall de winincrémentation auto dans mysql
Probleme d'image aleatoire et lien (debutant)Problem MySQL et Phpmyadmin >HELP SVP !!<
mysql en ligne de commandes[PostgreSQL] trigger qui ne passe pas les param à la fonction
erreur ajout d'enregistrementEquivalent MySQL
MySQL : trigger impossible >> PLEASE HELP!fonction dopostback
Plus de sujets relatifs à : [MySQL] sélection aléatoire d'enregistrement en fonction de ....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR