Problème de jointure

Eléphanteau du PHP | 24 Messages

18 avr. 2008, 23:06

Bonjour,

Je sèche actuellement sur un problème je pense assez facile mais n'ayant pas pratiqué depuis un moment je suis bloqué.

Pour faire "simple", j'ai 3 tables :

Code : Tout sélectionner

VIDEOS : CREATE TABLE `videos` ( `id_video` int(11) NOT NULL auto_increment, `titre` varchar(100) NOT NULL, PRIMARY KEY (`id_video`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; ACTEURS : CREATE TABLE `acteurs` ( `id_acteur` int(11) NOT NULL auto_increment, `nom` varchar(100) NOT NULL, PRIMARY KEY (`id_acteur`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; ACTEURS_POUR_VIDEO : CREATE TABLE `acteurs_pour_video` ( `id_video` int(11) NOT NULL, `id_acteur` int(11) NOT NULL, UNIQUE KEY `unique` (`id_video`,`id_acteur`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Je cherche à obtenir la liste de tous les acteurs existants dans la table ACTEURS avec un flag pour ceux participant par exemple dans la vidéo ayant id_video = 2.

J'ai commencé avec cette requette :
SELECT A. * , APV.id_video
FROM acteurs A
LEFT JOIN acteurs_pour_video APV ON APV.id_acteur = A.id_acteur
WHERE id_video =2

Et dans ce cas je n'obtiens que les acteurs jouant dans la video 2 (id_video =2).

Si j'utilises la requête suivante :

Code : Tout sélectionner

SELECT A. * , APV.id_video FROM acteurs A LEFT JOIN acteurs_pour_video APV ON APV.id_acteur = A.id_acteur
J'ai donc tous les acteurs de la table ACTEURS avec l'id_video différent de NULL lorsqu'un acteur joue dans une vidéo mais NULL lorsqu'aucun acteur ne joue dans aucune vidéo. Le problème est que je récupère plusieurs fois le même nom si acteur joue dans plusieurs vidéo alors que je le voudrais qu'une fois.

Je ne sais pas si je suis clair mais si vous voyes une solution... je suis preneur !
Modifié en dernier par chatlumo le 18 avr. 2008, 23:38, modifié 1 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 avr. 2008, 23:35

Tu n'étais pas loin,

Code : Tout sélectionner

SELECT A. * , APV.id_video FROM acteurs A LEFT JOIN acteurs_pour_video APV ON APV.id_acteur = A.id_acteur AND APV.id_video = 2
N'oublie pas les balises

Code : Tout sélectionner

la prochaine fois !

Eléphanteau du PHP | 24 Messages

18 avr. 2008, 23:37

Extra !
Merci !