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 :

Autojointure sur modèle entité attribut valeur


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut Autojointure sur modèle entité attribut valeur
    Bonjour,

    J'ai une table qui utilise le modèle entité attribut valeur (la table postmeta de wordpress) qui stocke pour chacun de mes post (post_id), un nombre indéterminé de couple clé/valeur :




    Deux clés m'intéressent particulièrement : views et viewcount, donc je souhaiterais récupérer une liste des mes post_id avec pour chaque post_id la valeur de views et la valeur de viewcount :




    Je ne vois pas du tout comment faire, j'ai essayé avec un LEFT JOIN mais je bloque. En général quand on fait une jointure on utilise le nom d'un champ dans le ON :
    LEFT JOIN table2 ON table1.champ = table2.champ.

    Mais là c'est sur la valeur du champ meta_key qu'il faudrait faire la jointure, ça me dépasse complétement .

    Pourriez-vous m'aider ?
    Télécharger la table postmeta

    Merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Salut,

    La petite difficulté vient du fait que, visiblement, views et viewcount ne sont pas systématiquement renseignés pour un post_id donné (au moins un des 2 est renseigné, mais pas nécessairement les 2, non ?).
    Ou au moins viewcount est-il toujours renseigné ?
    En partant du principe que non, essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.post_id, v.meta_value AS views, c.meta_value AS viewcount
    FROM  postmeta p
    LEFT JOIN postmeta v ON p.post_id = v.post_id AND v.meta_key = 'views'
    LEFT JOIN postmeta c ON p.post_id = c.post_id AND c.meta_key = 'viewcount'
    ORDER BY p.post_id
    Si viewcount est toujours renseigné pour un post_id, alors la deuxième jointure n'est plus utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT p.post_id, v.meta_value AS views, p.meta_value AS viewcount
    FROM  postmeta p
    LEFT JOIN postmeta v ON p.post_id = v.post_id AND v.meta_key = 'views'
    ORDER BY p.post_id
    À tester...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Ok merci, je ne savais pas qu'on pouvait ajouter des AND après le ON.

    Normalement views et viewcount sont tous les deux renseignés, mais ça n'est pas vrai pour tous les tuples, il y a quelques exceptions.

    Entre temps j'ai trouvé une autre solution avec des tables temporaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    	wpst_postmeta.post_id,
    	wpst_posts.post_title,
    	wpst_posts.post_type,
    	views.meta_value AS views,
    	viewcount.meta_value AS viewcount,
    	ABS(viewcount.meta_value-views.meta_value) AS difference
    FROM (SELECT DISTINCT post_id FROM wpst_postmeta) wpst_postmeta
    LEFT JOIN wpst_posts ON wpst_postmeta.post_id = wpst_posts.ID
    LEFT JOIN (SELECT post_id, meta_value FROM wpst_postmeta WHERE meta_key = 'views') views ON wpst_postmeta.post_id = views.post_id
    LEFT JOIN (SELECT post_id, meta_value FROM wpst_postmeta WHERE meta_key = 'viewcount') viewcount ON wpst_postmeta.post_id = viewcount.post_id
    Bon la requête est un peu violente parce que j'ai ajouté d'autres champs de la table post, mais ça marche super sinon !

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Ouh là, ça fait beaucoup de sous-requêtes et des performances qui risquent de se dégrader, une telle requête...
    Sinon, il y a visiblement un problème de modélisation. Dans ta requête, tu fais une différence sur le champ meta_value qui, dans ta table, est de type LONGTEXT...

    Sinon, c'est ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. Attribution valeur et focus sur un autre input
    Par TLOH45 dans le forum jQuery
    Réponses: 16
    Dernier message: 30/11/2011, 11h49
  2. [XSLT] test sur le commencement des valeurs des attributs
    Par mimiche_fr2000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h03
  3. demande de conseil sur le modèle entité/association
    Par amandiiiiiine dans le forum Access
    Réponses: 3
    Dernier message: 02/01/2007, 00h34
  4. Outils pour la conception d'un modèle Entités-Association
    Par heddicmi dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 05/04/2005, 10h04
  5. Réponses: 2
    Dernier message: 19/08/2003, 18h04

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