par
chatlumo » 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 !
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]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;[/code]
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]SELECT A. * , APV.id_video
FROM acteurs A
LEFT JOIN acteurs_pour_video APV ON APV.id_acteur = A.id_acteur[/code]
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 !