Aller au contenu

Problème de doublons dans une jointure


Sujets conseillés

Posté

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 :(

Posté

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 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

Posté

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... :(

Posté

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 ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...