IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Utiliser le contenu d'une table qui est clé étrangère sur une autre.


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 12
    Points
    12
    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.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    FROM Table1
          INNER JOIN Table2 ON (Table1.idService = Table2.idService)
    .....
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    a un detail pres, je ne vois pas pourquoi ta requete ne fonctionne pas !


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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 )
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 12
    Points
    12
    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 :

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

    Service (IDService, NomService, DispoService)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from vehicule;
    Et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    re

    je viens de creer les tables (en les simplifiant )

    et de creer un jeu de donnees bidon

    et cette requete fonctionne

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  10. #10
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut
    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.
    MCTS Database Development
    MCTS Database Administration

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    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.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Ce n'etait donc pas un probleme dans la requete, ouf !
    Merci d'ajouter un sur les tags qui vous ont aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/06/2015, 10h34
  2. Réponses: 3
    Dernier message: 04/06/2010, 22h57
  3. Une table.. qui ne ressemble pas a une table ?
    Par zevince dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 23/04/2007, 11h14
  4. Requete sur une table qui pointe 2 fois sur une autre
    Par Satch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/01/2006, 08h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo