Bonjour,
Je travaille actuellement sur un projet de développement de site web et je rencontre un problème pour l'élaboration d'une requête SQL imbriquée.
Voici une partie des tables de ma BDD :
Extrait de la table `films`
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ( `id` int(11) NOT NULL auto_increment, `date_sortie` varchar(100) NOT NULL, `annee_production` int(11) NOT NULL, `titre` varchar(150) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=218 ;
Extrait de la table `films_genres`--
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ( `id_film` int(11) NOT NULL, `id_genre` varchar(11) NOT NULL, PRIMARY KEY (`id_film`,`id_genre`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--Extrait du contenu de la table `films_genres`
--
(3, '19'),
(3, '5'),
(10, '6'),
(170, '1'),
(170, '8'),
(188, '1'),
(188, '11'),
Extrait de la table `genres`--
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ( `id` int(11) NOT NULL auto_increment, `nom` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
-- Extrait du contenu de la table `genres`
--
(1, 'Action'),
(2, 'Animation'),
(3, 'Art Martiaux'),
(4, 'Aventure'),
(5, 'Biopic'),
(6, 'Comédie'),
En fait, je sélectionne l'ensemble des films dont l'un des genre est "Action". A partir de ce résultat, je doit sélectionner les autres genres de chaque film.
Pour cela, je fait la requête suivante :
La requête fonctionne a moitié car elle me retourne trop de résultats (20 pages) avec plusieurs fois le même film. Moi je doit retourner chaque film une fois, avec l'ensemble des genres leur étant liés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT * FROM films_genres fg, films, genres WHERE id_film IN ( SELECT id_film FROM films_genres WHERE id_genre=$id_genre ) AND fg.id_genre = genres.id ORDER BY films.id ASC;
Voilà, j'espère que quelqu'un pourra me venir en aide.
Merci beaucoup !
Partager