Version complète: sur le forum Webmaster Hub : Problème de doublons dans une jointure
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
iBeb
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 sad.gif
lionel.a
Bonjour,
Tu as donné tout seul la réponse sans t'en rendre compte :
CITATION
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) :
CODE
SELECT r.id_r, g.id_g, p.id_ph, g.donnees AS donneesG ,p.donnees AS donneesP
FROM p_photos p
INNER JOIN p_a_galerie_photo a ON p.id_ph=a.id_ph
INNER JOIN p_galeries g ON g.id_g=a.id_g
WHERE g.onscreen='o' AND p.onscreen='o'
GROUP BY a.id_g
ORDER BY RAND()
LIMIT 6
iBeb
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... sad.gif
lionel.a
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 ?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.