Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 14/05/2011, 16h48   #1
Invité de passage
 
Homme Kevin
Étudiant
Inscription : avril 2008
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Âge : 21
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 15
Points : 3
Points : 3
Par défaut Utiliser le contenu d'une table qui est clé étrangère sur une autre.

Bonjour à tous,
Je dois créer un logiciel web et j'en viens à vous pour m'éclaircir sur une requête que je n'arrive pas à créer.

J'ai une table service : IDService, NomService
Une autre table : IDVehicule, NomVehicule, #IDService (clé étrangère de la table service.)

Je voudrais donc afficher le NomService en fonction de la valeur que prend #IDService.

Serais-ce possible ?
En attente de vous lire,
Bonne journée,
Tiranaure.
tiranaure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h00   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Il existe des cours sur le SQL sur le site.
Il serait judicieux d'en lire une partie

Il y a un point curieux dans le libelle de la question : je ne vois pas en quoi "l'autre table" intervient dans la requete puisque IdService est connue

donc la requete est du type

Code sql :
1
2
3
SELECT NomService
   FROM Service
   WHERE idService = :IdService

mais je pense qu'il y a une allusion a une jointure (interne) entre les 2 tables

une jointure s'ecrit
Code sql :
1
2
3
4
...
FROM Table1
      INNER JOIN Table2 ON (Table1.idService = Table2.idService)
.....
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h15   #3
Invité de passage
 
Homme Kevin
Étudiant
Inscription : avril 2008
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Âge : 21
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 15
Points : 3
Points : 3
Salut,
Je tiens tout d'abord à te remercier pour ton aide.
Je suis en première année de BTS IG donc j'ai vu les requête mais j'ai beaucoup de mal à cerner les jointures et j'ai d'ores et déjà essayé les jointures et de ce fait ta proposition mais j'arrive à une erreur :

Il m'affiche uniquement le premier nom de ma table service et ne tient pas compte de l'IDService qui est clé étrangère dans ma table vehicule.

J'ai deux vehicules : un qui a l'IDService à 1 correspond a l'employé et un autre véhicule qui a l'IDService à 3 correspondant à direction.

Sur les deux vehicules il m'affiche que leur service est employé, ce qui est complètement faux.

J'attends ta réaction à mon problème.
Cdlt,
Tiranaure

PS : Voici ma requête :
Code :
1
2
3
4
5
 
$req1="SELECT Service FROM service INNER JOIN vehicule ON (service.IDService = vehicule.IDService)";
 
	$result1=mysql_query($req1);
	$service=mysql_fetch_array($result1);
tiranaure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h33   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
a un detail pres, je ne vois pas pourquoi ta requete ne fonctionne pas !


Code sql :
1
2
3
SELECT Service.NomService -- il faut mettre le nom de colonne ou a defaut le "*"
      FROM service 
        INNER JOIN vehicule ON (service.IDService = vehicule.IDService)

penses a indenter ton (plus facile a lire et donc a corriger )
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h43   #5
Invité de passage
 
Homme Kevin
Étudiant
Inscription : avril 2008
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Âge : 21
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 15
Points : 3
Points : 3
Par défaut J'ai changé le champs Service en NomService mais aucun changement niveau erreur :/

J'ai bien mis le nom de la collone qui s'appelle Service et le nom de la table service. Ce qui fait la différence est donc le S majuscule et le s minuscule.

J'ai mis donc ton code en fonction de ma table service et ma colonne Service.

Cela n'a rien changé et j'ai sur mes deux lignes en service : Employé ....

Je ne comprends vraiment pas, je te donne la structure de mes deux tables en MLDR :

Citation:
Vehicule (IDVehicule, ImmatriculationVehicule, NumCleVehicule, ModeleVehicule, CarburantVehicule, Co2, FiltreAPolene, DateMiseCirculation, ProchainCT, DerniereRevision, DateReleveKm, Kilometre, ProchaineRevision, DateAjoutVehicule, DateModifVehicule, DateSuppVehicule, DispoVehicule, #IDService)

Service (IDService, NomService, DispoService)
tiranaure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h51   #6
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
normalement, majuscule et minuscule n'ont pas d'importance


je ne connais pas MYSQL, mais cle etrangere de la table Vehicule commence par #.
Est ce normal (possible) ?

Peux tu fournir un script des tables avec le jeu de donnees ?


j'arrete pour aujourd'hui
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 17h58   #7
Invité de passage
 
Homme Kevin
Étudiant
Inscription : avril 2008
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Âge : 21
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 15
Points : 3
Points : 3
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
CREATE TABLE Vehicule (IDVehicule int AUTO_INCREMENT NOT NULL, ImmatriculationVehicule VARCHAR(20),
NumCleVehicule INTEGER, ModeleVehicule VARCHAR(30), 
CarburantVehicule VARCHAR(20), 
Co2 INTEGER, FiltreAPolene VARCHAR(3), 
DateMiseCirculation DATE, 
ProchainCT DATE, 
DerniereRevision DATE, 
DateReleveKm DATE, 
Kilometre INTEGER, 
ProchaineRevision INTEGER, 
DateAjoutVehicule DATE, 
DateModifVehicule DATE, 
DateSuppVehicule DATE, 
DispoVehicule VARCHAR(3), 
IDService INT NOT NULL, 
IDLieu INT NOT NULL, 
PRIMARY KEY (IDVehicule) ) ENGINE=InnoDB;  
 
CREATE TABLE Service (IDService int AUTO_INCREMENT NOT NULL, 
Service VARCHAR(50), 
DispoService VARCHAR(3), 
PRIMARY KEY (IDService) ) ENGINE=InnoDB;
 
ALTER TABLE Vehicule ADD CONSTRAINT FK_Vehicule_IDService FOREIGN KEY (IDService) REFERENCES Service (IDService);
Non le # veut simplement dire dans le MLDR (modèle logique et relationel des données) que c'est un champ qui est clé étrangère. Dans la base de données c'est un champ comme un autre qui s'appelle IDService.

Bonne journée,
J'espère que tu pourras me répondre assez vite car je suis tenu par les délais.
En attendant je continue de chercher de mon coté.
En te remerciant vivement.
Tiranaure
tiranaure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 08h49   #8
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Comme je ne vois pas, ce qui ne convient pas dans ta requête et surtout dans son résultat, on va y aller par étapes.
Que donne:
Et
Code :
SELECT * FROM vehicule;
Et enfin
Code :
1
2
3
SELECT *
      FROM service S
        INNER JOIN vehicule V ON (S.IDService = V.IDService)
J'ai mis des * parce-que j'ai la flemme de taper toutes les colonnes, mais en général, il faut éviter.

Dernière question, la plus importante, que voudrais-tu que te renvoie ta requête, et en quoi le résultat de la requete précédente ne te convient pas.
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 09h01   #9
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
re

je viens de creer les tables (en les simplifiant )

et de creer un jeu de donnees bidon

et cette requete fonctionne

Code sql :
1
2
3
4
SELECT Service.Service,
       Vehicule.Immatriculationvehicule
  FROM Service
    INNER JOIN Vehicule ON (Service.Idservice = Vehicule.Idservice)

j'ai peur que se sont les donnees elles-meme qui sont a l'origine du pb,
ou alors ta demande est mal exprimee

peux tu m'envoyer un PT jeu de donnees impliquees dans cette requete; et faire cela par message prive (pas la peine de saturer le forum avec ce type de detail qui m'apporte pas beaucoup)

INFOS

j'ai reduit les colonnes de VEHICULE a :
    IDVEHICULE             
    IMMATRICULATIONVEHICULE  
    NUMCLEVEHICULE      
    IDSERVICE   
et SERVICE a:
    IDSERVICE  
    SERVICE
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 15h25   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
peux tu m'envoyer un PT jeu de donnees impliquees dans cette requete; et faire cela par message prive (pas la peine de saturer le forum avec ce type de detail qui m'apporte pas beaucoup)
Ça peut tout de même permettre aux autres qui souhaite aider de l'avoir ce jeu de données...


Etes vous sûr de la manière dont vous parcourez le résultat de la requête?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 14h31   #11
Invité de passage
 
Homme Kevin
Étudiant
Inscription : avril 2008
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Âge : 21
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 15
Points : 3
Points : 3
Bonjour, j'ai cherché longtemps et j'ai trouvé le problème c'est qu'il fallait mettre le fetch_row dans un while pour boucler dessus et afficher le résultat.

Merci de votre aide amis développeurs !
Bonne journée à vous.
tiranaure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 14h36   #12
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Ce n'etait donc pas un probleme dans la requete, ouf !
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h29.


 
 
 
 
Partenaires

Hébergement Web