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

Requêtes MySQL Discussion :

Récupérer les valeurs selon 2 tables : quelle requête ?


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Récupérer les valeurs selon 2 tables : quelle requête ?
    Bonjour à tous,

    Voici un problème que je soumets à votre expertise, car moi, je sèche...

    Je souhaite créer une requête qui me sorte un tableau récapitulatif.... à partir de quelques tables. Je détaille ici de manière très simplifiée mais dans le but d'aller à l'essentiel :

    Table offre
    id ==> clé primaire
    titre ==> recherche plombier h/f
    contenu ==> 'lorem ipsum....'

    Table variable_d_offre
    id ==> clé primaire
    offre_id ==> 1
    modele_id ==> 5
    valeur_de_la_variable ==> 50 € /h


    Table modèle_de_variable_d_offre
    id ==> clé primaire par exemple 5
    type ==> salaire

    J'ai donc 3 tables. Le principe étant qu'une offre d'emploi contient un titre et un contenu et qu'elle peut être complétée par différents types d'informations comme le salaire, la durée de contrat, une adresse mail de contact. Une offre d'emploi peut avoir 0 ou n variable_d_offre ; chaque variable d'offre étant caractérisée par un type.

    Quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM offre
    INNER JOIN variable_d_offre ON offre.id = variable_d_offre.offre_id
    je me retrouve alors avec autant de ligne par offre qu'il y a de variable d'offre. Si l'offre a été complétée par un salaire et un mail, j'obtiens alors :


    id, titre, valeur_de_la_variable
    offre X titre 50€/h
    offre X titre courrier@gmail.com
    offre Y titre Brest
    offre Z titre 30 € /h
    offre Z titre mail
    offre Z titre lieu
    ....


    Mais alors, est-il possible d'avoir directement les valeurs complémentaires en colonne d'après leur type ?
    C'est à dire d'avoir ceci :

    id, titre, type = salaire, type = mail, type = lieu
    offre X, titre, 50 €, courrier@gmail.com, NULL
    offre Y, titre, NULL, NULL, Brest
    offre Z, titre, 30 € /h, mail@mail.com, Nevers

    Faut-il passer par des sous requêtes ? Y a-t-il une possibilité d'arriver à obtenir ce résultat ?

    Merci pour vos indices et lumières.

    Squarou

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) On peut considérer que ce que vous cherchez à faire est de la cosmétique. Ce n'est pas le boulot du SGBD mais celui de l'application qui présente les données.

    2) Il vaut mieux éviter la guerre des étoiles !

    3) Pour avoir aussi le libellé du paramètre et pas seulement sa valeur qui, toute seule, ne signifie rien, il vous faut une autre jointure avec la table modèle_de_variable_d_offre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT o.id AS id_offre,
    	o.titre AS titre_offre,
    	m.type AS variable,
    	v.variable_de_la_variable AS valeur
    FROM offre o
    INNER JOIN variable_d_offre v ON v.offre_id = o.id
    	INNER JOIN modèle_de_variable_d_offre m ON m.id = v.modele_id
    ORDER BY o.id AS id_offre, m.type
    Si vous voulez extraire une variable (par exemple "salaire") pour toutes les offres, alors il suffit d'ajouter une condition de restriction à la requête précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT o.id AS id_offre,
    	o.titre AS titre_offre,
    	m.type AS variable,
    	v.variable_de_la_variable AS valeur
    FROM offre o
    INNER JOIN variable_d_offre v ON v.offre_id = o.id
    	INNER JOIN modèle_de_variable_d_offre m ON m.id = v.modele_id
    WHERE m.type = 'salaire'
    ORDER BY o.id AS id_offre
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Cherche un peu autour du PIVOT...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. [MySQL] impossible de récupérer les valeurs d'une table avec une requête préparée
    Par cfloriot dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/04/2016, 17h05
  2. Récupérer les valeurs d'un table
    Par lordatef dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/10/2011, 13h37
  3. Réponses: 5
    Dernier message: 27/04/2010, 14h55
  4. [MySQL] Récupérer les valeurs insérées dans la dernière requête
    Par qwertyu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/10/2009, 18h28
  5. [MySQL] Récupérer les valeurs d'une table dans un tableau
    Par bachboucha dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/06/2009, 09h50

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