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

MySQL Discussion :

Requête avec pivot de lignes en colonnes [MySQL-5.5]


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 13
    Points
    13
    Par défaut Requête avec pivot de lignes en colonnes
    Bonjour,
    la requete m'affiche ça:
    Nom : Capture.PNG
Affichages : 751
Taille : 10,7 Ko
    par contre moi je veux que la premiere ligne voila la requete :
    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
    select
     pm1.post_id,post_title
    ,MAX(pm1.organization)
    ,MAX(pm1.nomPersonne)
    ,MAX(pm1.categoryPersonne)
    from (
    SELECT
         pm.post_id
        ,CASE pm.meta_key WHEN 'organization' THEN `pm`.meta_value else null END AS 'organization'
        ,CASE pm.meta_key WHEN 'nomPersonne' THEN `pm`.meta_value else null  END AS 'nomPersonne'
        ,CASE pm.meta_key WHEN 'categoryPersonne' THEN `pm`.meta_value else null  END AS 'categoryPersonne'
     
    FROM
         wp_postmeta pm
    where
         pm.`meta_key` = 'nomPersonne' and pm.`meta_value` =  'Mustapha'
      or pm.`meta_key` = 'organization' and pm.`meta_value` =  'Web'
      or pm.`meta_key` = 'categoryPersonne' and pm.`meta_value` =  'Media'
    ) pm1, `wp_posts` p
    where pm1.post_id = p.ID
    group by
    pm1.post_id
    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    il manque des parenthèses dans le where de la sous-requete, avec des combinaisons and/or ca ne pardonne pas

    Pour n'avoir que la 1ere ligne il suffit d'ajouter fetch first 1 rows only

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Pour n'avoir que la 1ere ligne il suffit d'ajouter fetch first 1 rows only
    Je suppose que c'est du PHP ?

    En SQL de MySQL, on ajoute une clause TOP 1
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    En fait ce que je veux c est la ligne ou y a les informations que je cherche, dans cette exemple il m affiche bien la premiere ligne avec les bonnes conditions que j'ai mis par contre PK il m affiche les autres aussi avec null. J ai essaye de changer or avec and mais ça marche pas

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Il te met les autres lignes parce que tu as demandé tous les posts Mustapha ou Web ou Media.

    Si tu veux les éliminer, tu ajoutes un HAVING :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    group by pm1.post_id
    having MAX(pm1.organization)is not null and MAX(pm1.nomPersonne) is not null and MAX(pm1.categoryPersonne)is not null
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Une autre solution est de faire un alias de table par type d'info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select  pm1.post_id, post_title, pers.meta_value, org.meta_value, categ.meta_value
    from pm1
      inner join wp_postmeta org on pm1.post_id = org.ID and org.meta_key = 'organization'
      inner join wp_postmeta pers on pm1.post_id = pers.ID and pers.meta_key = 'nomPersonne'
      inner join wp_postmeta categ pm1.post_id = categ.ID and categ.meta_key = 'categoryPersonne'
    where pers.meta_value =  'Mustapha'
      and org.meta_value =  'Web'
      and categ.meta_value =  'Media'
    Normalement c'est plus performant parce que ça évite de faire des sous-requêtes.

    Sous réserve de test bien sûr...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    Votre deuxième solution a l'air plus performante, mais ça m'affiche cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table/alias: 'org' non unique

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Effectivement, j'ai fait une erreur de copier-coller. J'ai corrigé directement sur mon message original ci-dessus (en vert gras).
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 13
    Points
    13
    Par défaut
    Parfait aprés des petites modif ça marche le voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select  pm1.ID, post_title, pers.meta_value, org.meta_value, categ.meta_value
    from `wp_posts` pm1
      inner join wp_postmeta org on pm1.ID = org.post_id and org.meta_key = 'organization'
      inner join wp_postmeta pers on pm1.ID = pers.post_id and pers.meta_key = 'nomPersonne'
      inner join wp_postmeta categ on pm1.ID = categ.post_id and categ.meta_key = 'categoryPersonne'
    where pers.meta_value =  'Mustapha'
      and org.meta_value =  'Web'
      and categ.meta_value =  'Media'
    Merci bcp pour votre aide

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

Discussions similaires

  1. [XL-2007] ajouter la serie "X" dans un graphique en VBA avec variables pour Ligne et colonne
    Par maxime-a dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/04/2015, 14h40
  2. Requête avec comparaison dates sur deux colonnes
    Par DAVJO dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2015, 10h22
  3. Pivot de lignes en colonnes d'un questionnaire sous forme tabulaire
    Par coyote35 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 27/02/2013, 14h44
  4. Requête SQL, transformer des lignes en colonne
    Par gadget2 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/11/2010, 20h50
  5. requête avec la somme d'une colonne et un GROUP BY
    Par xenos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/09/2007, 14h03

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