Bonjour à tous,
Tout d'abord merci à ceux et celles qui prendront le temps de lire mon appel à l'aide et m'aideront à le solutionner.
Je pense que ça ne doit pas être très méchant, mais après plusieurs heures de recherches et de tentatives infructueuses, je commence à caler sévère...
Le soucis est certainement dû aux liaisons entre les tables.
Voilà donc la structure de ma base et ce que je voudrais :
- J'ai une table nommée "photo" dans laquelle sont référencées l'ensemble des photos d'une bibliothèque. Dans le cas ou un objectif photo à était utilisé, il y a comme valeur l'ID de celui-ci dans le champ "id_objectif". Si aucun n'a était utilisé, la valeur du champ est NULL.
- J'ai une autre table nommée "accessoire" dans laquelle sont référencés les différents accessoires que l'on peut utiliser.
- Enfin, une troisième table nommée "utiliser" dans laquelle le lien est fait entre l'ID de la photo et le ou les accessoires utilisés pour ce cliché.
Je fais une requête ou je veux uniquement les photos dont l'objectif utilisé ID#3 par exemple à était utilisé.
La requête suivante me retourne un résultat correct de 63 lignes.Maintenant, si j'effectue le même critère mais en faisant le lien avec la table utiliser, je me retrouve avec seulement 5 lignes !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM photo WHERE id_objectif = 3
Dans ce second exemple, la liaison avec la table "utiliser" ne sert à rien, je vous l'accorde. Mais je veux garder ce lien car les prochaines requêtes doivent se faire en appliquant le critère sur l'objectif utiliser, mais également sur les accessoires utilisés. La requête que je prévoyais d'écrire est
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM photo, utiliser WHERE photo.id_photo = utiliser.id_photo AND id_objectif = 3Le problème vient certainement du type de liaison entre mes tables, mais après plusieurs essais entre INNER JOIN, JOIN, LEFT INNER JOIN... je bloque toujours.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM photo, utiliser WHERE photo.id_photo = utiliser.id_photo AND id_objectif = 3 AND id_accessoire IN (5, 9, 3)
Petite précision, dans la table utiliser peut se trouver plusieurs lignes avec le même ID photo, du fait que plusieurs accessoires peuvent être utilisés pour une seule et même photo.
Je voudrai éviter également de devoir faire un UNION car pour l'explication du problème j'ai synthétisé la requête mais il y a en fait plusieurs liens entre des tables et des champs affichés.
Je suis pour autant certain que le problème provient de ce que je viens de vous décrire car j'ai décomposer ma requête pour voir quelle partir posait problème.
Vous remerciant d'avance pour votre précieuse aide.
Séb
P.S : J'anticipe la question si vous souhaitez tout de même la requête complète
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT DISTINCT PHOTO.id_photo AS id_photo, PHOTO.nom AS nom_photo, repertoire_parent, localisation_approximative, date_prisedevue, heure_prisedevue, date_insertion, datetime_modification, note, bracketing, panoramique, descriptif, hauteur, largeur, orientation, focale, ouverture, vitesse, programme, iso, blancs, flash, style, mesure, fichier_raw, fichier_dpp, fichier_psd, fichier_tiff, LIEU.nom AS nom_lieu, REGION.nom AS nom_region, PAYS.nom AS nom_pays, BOITIER.fabricant AS fabricant_boitier, BOITIER.modele AS modele_boitier, OBJECTIF.fabricant AS fabricant_objectif, OBJECTIF.modele AS modele_objectif FROM lieu LIEU, region REGION, pays PAYS, boitier BOITIER, utiliser UTILISER, photo PHOTO LEFT OUTER JOIN objectif OBJECTIF ON PHOTO.id_objectif = OBJECTIF.id_objectif WHERE PHOTO.id_lieu = LIEU.id_lieu AND LIEU.id_region = REGION.id_region AND REGION.id_pays = PAYS.id_pays AND PHOTO.id_boitier = BOITIER.id_boitier AND UTILISER.id_photo = PHOTO.id_photo AND PHOTO.id_objectif = 3 ORDER BY nom_photo DESC
Partager