Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 00h06   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 7
Points : 0
Points : 0
Par défaut Joindre 3 tables avec une au centre !

Bonjour à tous,

Voici plusieurs jours que j'essaie de retourner ce problème dans tous les sens mais mes connaissances en BDD étant limitées, je ne parviens pas à faire ce que je veux...

J'ai 3 tables comme suit :

Routes
id départ arrivée

Vols
id dateduvol route_id

Tarifs
id typedetarif montant route_id

- Les différents trajets sont définis dans la table "Routes"
Ex :
1/ Paris Marseille
2/ Paris Toulouse
...

- La table "Vols" contient les différents vols effectués avec une jointure vers leur route
Ex :
1/ 15/11/2010 12:00 1
2/ 15/11/2010 13:00 2
3/ 15/11/2010 14:30 2
...

- La table "Tarifs" contient le prix de chaque route
Ex :
1/ Classe affaires 200 2
2/ Classe eco 98 1
3/ Classe eco 50 2
4/ Classe affaires 120 1
...

J'aimerais savoir s'il est possible en 1 seule requête (qui serait si possible "compatible" avec Doctrine) de récupérer la liste des vols pour une date et une destination précises avec leurs différents tarifs par exemple sous la forme :

Vol 2 15/11/2010 13:00 Paris Toulouse Classe eco 50
Vol 2 15/11/2010 13:00 Paris Toulouse Classe affaires 200
Vol 3 15/11/2010 14:30 Paris Toulouse Classe eco 50
Vol 3 15/11/2010 14:30 Paris Toulouse Classe affaires 200

Je n'arrive pas à voir quel type de jointure on peut utiliser sachant que je fais un SELECT sur la table "Vols", que je fais un LEFT JOIN sur la table "Routes", ça m'affiche bien les différents vols selon mes critères en WHERE. Mais pour joindre la table "Tarifs", là je sèche...
Merci de votre aide !
skydig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h09   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Il faut faire des jointures entre les tables dans la requête. Quelle difficulté rencontres-tu ?
Montre nous ton essai de requête.
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h14   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 7
Points : 0
Points : 0
Excuse moi, j'ai modifié mon premier message après ta réponse, je disais donc :

Je n'arrive pas à voir quel type de jointure on peut utiliser sachant que je fais un SELECT sur la table "Vols", que je fais un LEFT JOIN sur la table "Routes", ça m'affiche bien les différents vols selon mes critères en WHERE. Mais pour joindre la table "Tarifs", là je sèche...
Merci de votre aide !

Code :
1
2
3
SELECT * ON Vols v
LEFT JOIN Routes r ON v.route_id = r.id
WHERE blablabla
skydig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h19   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Et bien fais une jointure supplémentaire !

Et ton premier ON est à remplacer par FROM.
Code :
1
2
3
4
5
SELECT les_colonnes_dont_tu_as_besoin_et_pas_étoile
FROM Vols v
LEFT JOIN Routes r ON v.route_id = r.id
  LEFT JOIN Tarifs t ON t.route_id = r.id
WHERE blablabla
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h22   #5
Invité de passage
 
Inscription : novembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 7
Points : 0
Points : 0
[HS ON]Merci de corriger mes erreurs de syntaxe, en fait j'ai tapé ça de tête car ce n'est pas moi qui écris les requêtes car je passe par Doctrine [HS OFF]

J'essaie ton truc et je reviens...
skydig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 00h30   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 7
Points : 0
Points : 0
Bah oui ta requête fonctionne, mon problème doit venir d'ailleurs alors...
skydig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 10h08   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par skydig Voir le message
Bah oui ta requête fonctionne, mon problème doit venir d'ailleurs alors...
Quel problème ?
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 11h13   #8
Nouveau Membre du Club
 
Inscription : octobre 2009
Messages : 110
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : octobre 2009
Messages : 110
Points : 27
Points : 27
Envoyer un message via MSN à DUCKY_
Pour ma part pour ce genre de requête plutôt que d'utiliser "left join" j'utilise des closes " WHERE "

ex : Where e.ID_AVION = a.ID_AVION

Peut-être que ça pourra t'aider à construire ta requête ...

Cordialement,
DUCKY_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 11h18   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 927
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 927
Points : 18 115
Points : 18 115
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par DUCKY_ Voir le message
Pour ma part pour ce genre de requête plutôt que d'utiliser "left join" j'utilise des closes " WHERE "

ex : Where e.ID_AVION = a.ID_AVION
Beurk !
La syntaxe normalisée depuis 1992 pour les jointures est JOIN ... ON ! Il serait temps de s'y mettre !

De plus, la condition de jointure dans le WHERE est une jointure interne alors que LEFT JOIN est une jointure externe.

Zéro pointé !
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 01h44   #10
Invité de passage
 
Inscription : novembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 7
Points : 0
Points : 0
En fait mon problème venait de la variable php dans laquelle sont stockés les résultats de la requête, je ne l'utilisais pas correctement du coup ça ne me retournait rien.
skydig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h14.


 
 
 
 
Partenaires

Hébergement Web