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 :

Aide pour requête SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Aide pour requête SQL
    Bonjour a tous,

    Premier post pour moi ici, j'espère formaliser les choses de façon claires .
    Je suis un développeur et cela fait un bon moment que je n'ai pas eu a travailler avec une base de donnée relationnelle.

    En l’occurrence je travaille sur un projet en java qui interagit avec une base de donnée mysql centralisant les projets d'une région. Les projets sont postés par l'intermédiaire d'un blog chaque projet ayant une id unique.

    La structure de la table qui m’intéresse est la suivante :

    • meta_id bigint(20)
    • post_id bigint(20)
    • meta_key varchar(255)
    • meta_value longtext


    meta_id est une clé primaire qui ne m’intéresse pas pour la requête, post_id permet de rattacher un ensemble de couple (meta_key, meta_value) a un projet unique, et la liste des meta_key / meta_value permet de stocket pour chaque projet un ensemble de critères comme le département ou bien la catégorie dans laquelle le projet a été posté.

    Un exemple d'enregistrement peut donc être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    post_id 	meta_key 	 	meta_value
    ----------------------------------------------------
     1 	 	  etab_dep 	 	     75
     1 	  	  domaine_du_projet 	  	     Multimedia
     1 	 	  ... 	 	             ...
     1                etc                        etc
    Et j'aimerais pour chaque id récupérer en une seule requete le département et le domaine.

    J'ai essayé cette requête qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT post_id,meta_value FROM `wp_postmeta`
    WHERE post_id=1 AND meta_key IN('etab_dep', 'domaine_du_projet' )
    Le résultat étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    post_id     meta_value
    -------------------------
       1         Multimedia
       1               75
    Et j'aimerais avoir un résultat du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    post_id     meta_value         meta_value
    ------------------------------------------
       1         Multimedia               75
    Est-ce possible ?
    Cela-a-il un impact sur les performances ?
    Ne devrais pas plutot laisser ma requête telle quelle et laisser mon programmer récupérer les bonnes valeurs dans les bonnes variables ?

    Merci de votre aide,
    K

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

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    On est la encore sur des requetes utilisant le "PIVOT"

    il y a quelques post sur ce sujet dans la semaine


    mais je trouve, mais peut etre ai-mal compris (ce qui m'arrive souvent) , qu'il y a surtout un probleme dans la structuration de la base.

    mais meme bien structure, cela ne changera pas le pb du PIVOT,
    j'ai cru entendre que cette possibilite existe en MySQL
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    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 le faire en effectuant une auto-jointure :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT 
        post_id,
        depart.meta_value AS departement
        Domaine.meta_value AS Domaine
    FROM `wp_postmeta` depart
    LEFT OUTER JOIN `wp_postmeta` domaine
        ON depart.post_id = domaine.post_id
        AND domaine.meta_key = 'domaine_du_projet' 
    WHERE depart.post_id=1 
        AND depart.meta_key = 'etab_dep'

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

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    re

    aieeeuuuuu en es-tu sur ?

    post_id meta_key meta_value
    ----------------------------------------------------
    1 depart 75
    1 domaine Multimedia
    1 domaine Web
    1 ... ...
    1 etc etc
    comment doit figurer "Web" sur une nouvelle ligne, ou une nouvelle colonne ?

    Kailash ?
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En fait une post_id n'a qu'un seul domaine ou département possible.
    Du coup ce n'est pas possible d'avoir plusieurs lignes domaine par id.
    Je sais que la structure de la base de données peut paraître un peu bizarre.
    En fait il faut comprendre que cette table contient tout un tas de meta_tag (sous la forme meta_key='tag' / meta_value='valeur_du_tag'). Mais chaque tag (qui peut etre le département, un numéro de dossier, le domain etc) sont uniques par projet.

    J'ai édité mon premier post j'avais fait une erreur qui a pu engendrer une confusion je m'excuse. depart est en fait etab_dep et domaine est domaine_du_projet.

    Merci.

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

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    post_id 	meta_key 	 	meta_value
    ----------------------------------------------------
     1 	 	  depart 	 	     75
     1 	  	  domaine 	  	     Multimedia
     1 	 	  ... 	 	             ...
     1                etc                        etc

    donc ce modele est impossible (avec plus de 2 pos_id), correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    post_id 	meta_key 	 	meta_value
    ----------------------------------------------------
     1 	 	  depart 	 	     75
     1 	  	  domaine 	  	     Multimedia
      2 	 	  depart 	 	     76
     2 	  	  domaine 	  	     Web1
     	 	  ... 	 	             ...
     ...              etc                        etc
    si oui, la requete de aieeeuuuuu est parfaite
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    post_id 	meta_key 	 	meta_value
    ----------------------------------------------------
     1 	 	  depart 	 	     75
     1 	  	  domaine 	  	     Multimedia
     2 	 	  depart 	 	     76
     2 	  	  domaine 	  	     Web1
     	 	  ... 	 	             ...
     ...              etc                        etc
     
    si oui, la requete de aieeeuuuuu est parfaite
    C'est la structure exacte de la table.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Messages aux intervenants réguliers : essayez de l'apprendre celle-là parce qu'elle revient très souvent et fréquemment vous ne proposez pas la meilleure solution !
    Si l'auteur cherchait à construire un pivot sur douze valeurs (un par mois, structure fixe donc acceptable), vous feriez onze jointures externes ?
    J'en doute !

    Il vaut mieux écrire la requête ainsi (un seul table scan, syntaxe normative multi SGBD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      SELECT post_id
           , max(case meta_key when 'domaine_du_projet' then meta_value end) as domaine
           , max(case meta_key when 'etab_dep'          then meta_value end) as etab_dep
        FROM wp_postmeta
       WHERE meta_key IN ('etab_dep', 'domaine_du_projet')
    GROUP BY post_id
    ORDER BY post_id ASC

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Enorme merci beaucoup Waldar tu n'as pas idée au combien tu viens de simplifier mon programme et mes nuits par la même occasion. Merci encore !!!

  10. #10
    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
    Citation Envoyé par Waldar Voir le message
    Il vaut mieux écrire la requête ainsi (un seul table scan, syntaxe normative multi SGBD) :


    Si l'auteur cherchait à construire un pivot sur douze valeurs vous feriez onze jointures externes ?
    J'en doute !
    même pas peur, à défaut d'être bon, je suis courageux

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

Discussions similaires

  1. Aide pour requête SQL
    Par 0x0000091 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/01/2009, 15h50
  2. Aide pour requête SQL
    Par eatherquake dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/12/2008, 14h44
  3. Aide pour requête SQL assez simple
    Par Pilloutou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 28/03/2008, 15h07
  4. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 18h20
  5. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 08/06/2006, 23h16

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