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 :

Jointure entre 2 tables groupe les resultats sur une seule ligne


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Jointure entre 2 tables groupe les resultats sur une seule ligne
    Bonsoir à tous ceux qui ne dorme pas à cette heure là ou ceux qui ne dorment jamais ,

    Je bloque depuis une bonne demi heure sur une histoire de requête à la noix qui fait que je vais finir par m'en taper le clavier sur la tête
    Voilà j'ai les tables suivantes :


    utilisateur
    ID_UTILISATEUR
    NOM



    utiliser_materiel
    ID_UTILISATEUR
    ID_MATERIEL




    materiel
    ID_MATERIEL
    ID_TYPE


    type
    ID_TYPE
    NOM




    Enfait j'aimerai récupérer les 'materiels' ainsi que leur type, utilisés pour chaque utilisateur.


    J'ai la requète suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT u.ID_UTILISATEUR ,m.ID_MATERIEL, t.NOM AS NOM_TYPE
    FROM utilisateur u
     
    INNER JOIN utiliser_materiel um
    ON um.ID_UTILISATEUR = u.ID_UTILISATEUR
     
    INNER JOIN materiel m
    ON m.ID_MATERIEL = um.ID_MATERIEL
     
    INNER JOIN type t
    ON t.ID_TYPE = m.ID_TYPE;

    Mais elle retourne au format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
     
    +----------------+-------------+------------+
    | ID_UTILISATEUR | ID_MATERIEL | NOM_TYPE   |
    +----------------+-------------+------------+
    |              1 |           1 | computer   |
    |              1 |           2 | imprimante |
    +----------------+-------------+------------+

    Je ne trouve plus comment afficher au format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    +----------------+---------------+  -------------+ -------------+ -------------+
    | ID_UTILISATEUR | ID_MATERIEL1 | TYPE1          |ID_MATERIEL2  |          TYPE2 |
    +----------------+---------------+--------------+--------------+--------------+
    |              1 |           1 |              1 |           2|              2 |
    +----------------+---------------+--------------+--------------+--------------+


    Merci d'avance pour votre aide et bonne nuit aux dormeurs

  2. #2
    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,

    Faites une recherche avec le mot clef PIVOT, ce qui vous donne par exemple ceci

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour aieeeuuuuu(sa a dû faire mal... ),

    Blague à part je vous remercie pour votre reponse car elle m'a bien aidé.

    voici donc ma nouvelle requete tip top.


    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
     
    SELECT u.`ID_UTILISATEUR`,
    MAX(CASE WHEN m.ID_TYPE = 1 THEN um.ID_MATERIEL ELSE NULL END) AS ORDINATEUR,
    MAX(CASE WHEN m.ID_TYPE = 2 THEN um.ID_MATERIEL ELSE NULL END) AS LAPTOP,
    MAX(CASE WHEN m.ID_TYPE = 3 THEN um.ID_MATERIEL ELSE NULL END) AS IMPRIMANTE,
    MAX(CASE WHEN m.ID_TYPE = 4 THEN um.ID_MATERIEL ELSE NULL END) AS STATION
     
    FROM `utilisateur` u
     
    INNER JOIN utiliser_materiel um
    ON um.ID_UTILISATEUR = u.ID_UTILISATEUR
     
    INNER JOIN materiel m
    ON um.ID_MATERIEL = m.ID_MATERIEL
     
    LEFT JOIN type t
    ON t.ID_TYPE = m.ID_TYPE
     
    GROUP BY um.ID_UTILISATEUR;


    Si il y'a tout ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MAX(CASE WHEN m.ID_TYPE = 1 THEN um.ID_MATERIEL ELSE NULL END) AS ORDINATEUR,
    MAX(CASE WHEN m.ID_TYPE = 2 THEN um.ID_MATERIEL ELSE NULL END) AS LAPTOP,
    MAX(CASE WHEN m.ID_TYPE = 3 THEN um.ID_MATERIEL ELSE NULL END) AS IMPRIMANTE,
    MAX(CASE WHEN m.ID_TYPE = 4 THEN um.ID_MATERIEL ELSE NULL END) AS STATION
    C'est simplement parce que j'ai dans la table type j'ai 4 type de materiel différent, donc je verifie chaque type un par un vue que je peux pas faire de boucle.


    Si vous ou quelqu'un d'autre a une proposition pour améliorer je suis preneur




  4. #4
    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
    Une alternative - qui serait d'ailleurs une bonne chose et votre SGBDR vous en remerciera - serait de pivoter dans l'application cliente.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    C'est ce que je comptais faire au début, mais je ne vois pas comment récupérer cela en php

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    avec un array_splice() ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je viens de me rendre compte que ma requete ne renvoi pas les utilisateurs qui n'ont pas de pc


    edit : le mieux serais peut être que je divise ma requete et là je pourrai afficher via le php.

    Je vais faire comme ça je pense

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2015, 07h32
  2. Afficher les résultats sur une seule ligne
    Par arnovodao dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/07/2013, 15h49
  3. Affichage les resultats sur la meme ligne
    Par ttttnht dans le forum Sybase
    Réponses: 1
    Dernier message: 03/11/2010, 19h06
  4. [AC-2007] Requête UNION : récuperer les valeurs sur une seule ligne
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/12/2009, 13h02
  5. Relation un à n : mettre les résultats sur une seule ligne
    Par juju33 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 13/08/2007, 10h57

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