|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
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 :
Extrait de la table `films_genres` Code :
--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 :
-- 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 : Code :
Voilà, j'espère que quelqu'un pourra me venir en aide. Merci beaucoup ! |
||||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Bonjour,
Ta dernière requête n'est pas bonne, car il manque une jointure (3 tables et une seule jointure...). D'ailleurs tu l'aurais remarqué en employant l'opérateur JOIN. Pour résumer ta demande, tu veux tous films dont l'un des genres est "action", ainsi que leur genre: Code SQL :
La jointure sur fg1 permet d'avoir les films d'action, et la jointure fg2 permet de récupérer les genres des films en question. Tatayo. |
||
|
|
10
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Merci beacuoup pour ta réponse rapide !
Je n'ai pas encore testé ta requête mais je remet la mienne car j'ai vu qu'il y'avait eu un souci pour l'afficher dans me premier post. La voici : Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Quoi qu'il en soit, il manque toujours quelquechose, tu n'as aucune jointure entre la table film et les autres tables
...Tatayo. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Ok, donc j'ai testé et elle fonctionne comme je le voulais !
J'ai des questions. Comment ca se faite que lors du SELECT, on ne met que FROM films mais qu'on récupère quand même des informations de la table genres ? Pour moi, il faut absolument indiquer dans quelle table se trouve les informations demandées. Merci beaucoup ! |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Parce que les autres tables sont dans les jointures qui suivent le FROM !
Tu peux la refaire en mettant toutes les tables dans le FROM et les critères de jointure dans le WHERE, mais cette syntaxe est obsolète depuis... 92... Et puis en écrivant la requête ainsi, tu vois immédiatement s'il te manque une jointure ![]() Tatayo. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Ok merci pour ces infos.
Une dernière question mais je ne sais pas si c'est vraiment réalisable. J'aimerais savoir si il est possible de regrouper les résultats par film ( donc par l'id car 2 films peuvent avoir le même titre ) afin d'avoir chaque ligne "dédiée" à un seul film et comportant tous les genres liés au film ??? |
|
|
00
|
|
|
#8 |
![]() ![]() |
Comme tu utilises MySQL, il existe un machin pas du tout normatif qui s'appelle GROUP_CONCAT mais en fait ce que tu cherches à faire - avoir tous les genres d'un film sur la même ligne - est de la cosmétique et n'est pas le boulot du SGBD mais celui du logiciel qui présente les données à l'utilisateur.
Et pour apprendre les jointures, c'est par là.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Ok je vais y jeter un œil merci.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com