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 :

Problème SQL, Select plusieurs tables


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Référenceur
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Référenceur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème SQL, Select plusieurs tables
    Bonjour à tous,
    Je poste sur le forum pour un problème sur une requête SQL.
    Mon soucis est le suivant:

    Dans ma base de données, j'ai plusieurs tables dont deux qui vont nous intéresser dans mon problème.

    Une première avec différentes informations sur des "projets" (id, nom, date_création, creer_projet, creer_contenu, etc.)
    Une deuxième avec différentes options (id, name)

    J'ai réussi à créer ma partie modification et création, mais j'ai du mal pour mon index.
    Je souhaiterais afficher l'ensemble de mes projets avec les options (en texte) adéquates.

    Je n'ai pas de soucis pour afficher les différents id d'options (qui sont entrés dans la table projet), mais je n'arrive pas à récupérer le name de la table id.



    Un exemple vaut mieux qu'un long discours:

    Projets
    id name date creer_projet creer_contenu creer_rapport etat_site
    1 test test 1 2 3 4
    2 test2 test2 2 3 4 1
    3 test3 test3 1 1 2 2
    4 test4 test4 3 3 3 4


    Options

    id name
    1 a faire
    2 en attente
    3 en cours
    4 terminé


    Avec ces deux tables, j'aimerais afficher:

    id name date creer_projet creer_contenu creer_rapport etat_site
    1 test test a faire en attente en cours terminé
    2 test2 test2 en attente en cours terminé a faire
    3 test3 test3 a faire a faire en attente en attente
    4 test4 test4 en cours en cours en cours terminé


    Mais je n'y arrive pas car ma requête me renvoie (pour une même ligne) les mêmes options.

    Savez-vous comment faire ?

    Merci d'avance.

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

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    Bonjour

    Vous pouvez utiliser les jointures ou utiliser des sous-requêtes dans la partie résultat.

    NB : ce serait bien de mettre les requêtes que vous avais déjà réalisées

    o

  3. #3
    Candidat au Club
    Homme Profil pro
    Référenceur
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Référenceur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette première réponse, voici ce que je viens d'essayer, sans résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT projets.name as name, projets.date as date, 
    (SELECT options.name FROM options, projets WHERE projets.creer_contenu = options.id) as contenu, 
    (SELECT options.name FROM options, projets WHERE projets.creer_projet = options.id) as projet, 
    (SELECT options.name FROM options, projets WHERE projets.creer_rapport= options.id) as rapport, 
    (SELECT options.name FROM options, projets WHERE projets.etat_site = options.id) as site
    FROM projets, options
    Savez-vous m'orienter?

    Merci d'avance.
    Cordialement.
    Clément

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Vous avez un problème de modélisation.

    Le jour où vous rajoutez / enlevez une option vous serez obliger de modifier la structure de la table projet, ce qui est très lourd.

    Une modélisation plus adéquate serait (niveau MCD) :
    Projet-0,n----------Affecter---------------0,n-Option
    Etape-0,n------------|

    Dans étape on retrouverait donc : creer_projet, creer _contenu, ....

    Au final vous n'auriez que 3 tables à joindre entre elles pour avoir un résultat identique.


    Bref, il faut faire autant de jointures que vous avez de clefs étrangères option dans votre table projet.

    Et les jointures c'est par ici : http://sqlpro.developpez.com/cours/sqlaz/jointures/

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Vous pouvez par exemple faire ceci :

    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
     
    SELECT p.name
        ,p.date 
        , CreerContenu.name as CreerContenu
        , CreerProjet.name as CreerProjet
        , CreerRapport.name as creerRapport
        , etatSite.name as EtatSite
    FROM Projets p
    INNER JOIN options AS CreerContenu 
        ON CreerContenu.id = p.creer_contenu
    INNER JOIN options AS CreerProjet 
        ON CreerProjet.id ) p.creer_projet
    INNER JOIN options AS creerRapport
        ON creerRapport.id = p.creer_rapport
    INNER JOIN options AS EtatSite
        ON EtatSite.id = p.Etat_site

  6. #6
    Candidat au Club
    Homme Profil pro
    Référenceur
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Référenceur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci aieeeuuuuu
    Après un peu de recherche, j'ai réussi !
    Merci beaucoup pour ton aide

    (pour la petite information, j'ai eu une erreur Unknown column '' in 'on clause' car j'avais mis mes INNER JOIN après tous mes FROM, alors qu'il est nécessaire de mettre les INNER JOIN après le FROM projets p)

    Merci encore sujet résolu !

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

Discussions similaires

  1. [MySQL] Problème requete SQL sur plusieurs tables
    Par Tiib_CD dans le forum Langage SQL
    Réponses: 30
    Dernier message: 21/12/2006, 17h52
  2. Requete SQL jointure plusieurs tables
    Par bibicha dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 18h38
  3. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 11h59
  4. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 17h32
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26

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