iBeb Posté 5 Avril 2007 Posté 5 Avril 2007 Bonjour, J'ai une requete que je n'arrive pas à faire... Une table photos : id_ph, photo Une table galeries : id_g, nom Une table de liaison : p_a_galerie_photo : une photo peut appartenir à une ou plusiuers galeries, une galerie contient plusieurs photos... Le but de ma requête c'est d'aller chercher dans une table de photos (p_photos), des photos uniques appartenant à des galeries (table p_galeries) différentes. En gros : je veux tirer aléatoirement 6 identifiants de galerie, et pour cacun de ces identifiants récupérer une photo appartenant à cette galerie... En faisant le group by id_g : c'est tjs les mêmes photos qui sortent.. SELECT r.id_r, g.id_g, p.id_ph, g.donnees AS donneesG ,p.donnees AS donneesP FROM p_galeries g INNER JOIN p_a_galerie_photo a ON g.id_g=a.id_g INNER JOIN p_photos p ON p.id_ph=a.id_ph WHERE g.onscreen='o' AND p.onscreen='o' GROUP BY a.id_g ORDER BY RAND() LIMIT 6 Je précise... je suis débutant en BD
lionel.a Posté 7 Avril 2007 Posté 7 Avril 2007 Bonjour, Tu as donné tout seul la réponse sans t'en rendre compte : Le but de ma requête c'est d'aller chercher dans une table de photos (p_photos), des photos uniques Donc : SELECT ... FROM p_photos p !!! Ta requête (j'utilise left join par habitude, mais le problème ne porte pas dessus) : SELECT r.id_r, g.id_g, p.id_ph, g.donnees AS donneesG ,p.donnees AS donneesPFROM p_photos pINNER JOIN p_a_galerie_photo a ON p.id_ph=a.id_phINNER JOIN p_galeries g ON g.id_g=a.id_g WHERE g.onscreen='o' AND p.onscreen='o'GROUP BY a.id_gORDER BY RAND()LIMIT 6
iBeb Posté 10 Avril 2007 Auteur Posté 10 Avril 2007 Oui en effet c'est logique. Cependant, ça ne change malehreusement pas le résultat : en faisant un group by id_ph il arrive d'avoir des id_g identiques, et en faisant un group by id_g, une fois sur deux j'ai deux id_ph identiques... Peut-être n'est-il pas possible d'obetnir 6 photos aléatoires distinctes appartenant à 6 galeries aléatoires et distinctes en une seule requête...
lionel.a Posté 12 Avril 2007 Posté 12 Avril 2007 Pardon, c'est vrai, j'ai oublié de changer le GROUP BY : comme tu recherches des photos de ta table p, tu dois faire un GROUP BY sur p aussi (je crois même que c'est facultatif et que tu peux le supprimer. Tu peux aussi remplacer tes jointures par LEFT JOIN. Ca devrait marcher, non ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant