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 :

Mettre des enregistrements en attributs


Sujet :

Requêtes MySQL

  1. #1
    lia
    lia est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Points : 42
    Points
    42
    Par défaut Mettre des enregistrements en attributs
    Bonjour à tous,

    Je ne suis pas sûre que le titre de mon message soit très clair.

    Voilà, disons que j'ai une table1 comme suit:
    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
    ___________________________________
    |    fruit   | Caractéristique | Valeurs |
    | pomme |         taille           |      3      |
    | pomme |        couleur       |  rouge  |
    | pomme |         poids          |     50    |
    -------------------------------------------------
     
    Et j'ai aussi une table2:
    __________________________
    |   fruit   | prix/kg | qualité |
    |pomme|      2       |    0.5    |
    -------------------------------------
     
    Je voudrais obtenir une table3:
    _________________________________________________
    |   fruit   | taille | couleur | poids | prix/kg | qualité |
    |pomme|     3   |  rouge   |   50    |       2      |    0.5    |
    ---------------------------------------------------------------------
    Est-ce qu'il existe une requête pour faire ce genre de choses?

    Merci pour votre aide,

    lia

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Tu veux obtenir une table ou une vue ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT fruit, 
    GROUP_CONCAT(CONCAT( Caractéristique , Valeurs )) AS caract,
    `prix/kg`, qualité
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.fruit=t2.fruit
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    lia
    lia est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Points : 42
    Points
    42
    Par défaut
    Bonjour Maljuna Kris,

    Désolée de ne pas avoir répondu avant. J'ai du laisser cette partie de mon boulot un moment mais j'ai pu tester ta solution.

    En fait c'est une table que je veux obtenir

    Finalement, je me suis concentrée sur la première table, à laquelle j'ai rajouté une ligne, pour passer des valeurs en attributs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Table1
    +-------+---------+---------+
    | fruit | caract  | valeurs |
    +-------+---------+---------+
    | pomme | taille  | 3       |
    | pomme | couleur | rouge   |
    | pomme | poids   | 50      |
    | poire | couleur | jaune   |
    | poire | poids   | 60      |
    | poire | taille  | 4       |
    +-------+---------+---------+
    J'ai fait la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select distinct t1.fruit as fruit, t1.valeurs as taille, t2.valeurs as couleur, t3.valeurs as poids
    from table1 t1, table1 t2, table1 t3
    where t1.caract="taille"
        and t2.fruit=t1.fruit
        and t3.fruit=t1.fruit
        and t2.caract="couleur"
        and t3.caract="poids";
    Je n'ai pas utilisé INNER JOIN car je ne sais pas l'utiliser avec plus de 2 tables.

    et j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    +-------+--------+---------+-------+
    | fruit | taille | couleur | poids |
    +-------+--------+---------+-------+
    | pomme | 3      | rouge   | 50    |
    | poire | 4      | jaune   | 60    |
    +-------+--------+---------+-------+
    C'est ce que je voulais mais j'ai encore des questions:

    1- Est-ce que ma requête est correcte ou est-ce que j'ai eu de la chance?
    2- Est-ce qu'il y a moyen de l'optimiser? Je veux dire que jusqu'à présent pour faire ma requête j'ai besoin de savoir quels sont les valeurs différentes dans la colonne "caract". Mais est-ce qu'il est possible, par exemple, de faire une première requête "select distinct caract from table1;" et parcourir le résultat de cette requête pour créer une colonne correspondant à chaque élément de ce résultat? ça permettrait d'avoir une requête indépendante du nombre et des noms des valeurs qu'on veut mettre en colonnes.

    Merci beaucoup,

    lia

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par lia Voir le message
    j'ai encore des questions:

    1- Est-ce que ma requête est correcte ou est-ce que j'ai eu de la chance?
    Les deux, mon capitaine.
    Tu pouvais t'en sortir avec un GROUP BY
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT fruit,
    GROUP_CONCAT(IF(caract='taille',valeurs,NULL) AS taille,
    GROUP_CONCAT(IF(caract='couleur',valeurs,NULL) AS couleur,
    GROUP_CONCAT(IF(caract='poids',valeurs,NULL) AS poids
    FROM table1
    GROUP BY fruit;
    Citation Envoyé par lia Voir le message
    2- Est-ce qu'il y a moyen de l'optimiser? Je veux dire que jusqu'à présent pour faire ma requête j'ai besoin de savoir quels sont les valeurs différentes dans la colonne "caract". Mais est-ce qu'il est possible, par exemple, de faire une première requête "select distinct caract from table1;" et parcourir le résultat de cette requête pour créer une colonne correspondant à chaque élément de ce résultat? ça permettrait d'avoir une requête indépendante du nombre et des noms des valeurs qu'on veut mettre en colonnes
    Pour ce faire, jette un œil sur le premier article qui suit ma signature.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. Mettre à jour des combobox par attributs
    Par Cube55 dans le forum Silverlight
    Réponses: 6
    Dernier message: 25/05/2010, 16h57
  2. [AC-2007] Mettre des enregistrements dans l'ordre dans un champs multivalué
    Par miamou dans le forum VBA Access
    Réponses: 0
    Dernier message: 26/12/2009, 15h22
  3. [XSLT] Mettre des données dans un attributs de balise html
    Par Jimmy_S dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/01/2008, 16h04
  4. mettre des lignes d'enregistrement en couleur
    Par kumo dans le forum Modélisation
    Réponses: 17
    Dernier message: 11/06/2007, 18h10
  5. Réponses: 2
    Dernier message: 27/03/2005, 16h09

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