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 :

Optimisation de deux requêtes SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Optimisation de deux requêtes SQL
    Bonjour,

    je suis en train de refondre mon portfolio sous wordpress, et pour faciliter les choses par rapport à mon nouveau fonctionnement, je cherche à obtenir toutes les informations dont j'ai besoin en une seule requête.

    J'ai pour le moment une requête qui fonctionne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      SELECT p.ID, p.post_name, p.post_excerpt, p.post_date, p.guid, t.term_id, t.slug, pm.meta_value 
        FROM $wpdb->posts AS p, $wpdb->terms AS t, $wpdb->term_relationships AS tr, $wpdb->term_taxonomy AS tt, $wpdb->postmeta AS pm 
       WHERE p.post_status = 'publish'
         AND tt.term_id = t.term_id
         AND tt.term_taxonomy_id = tr.term_taxonomy_id
         AND tt.taxonomy = 'category'
         AND p.ID = tr.object_id
         AND p.ID = pm.post_id
         AND pm.meta_value LIKE '%.jpg%'
    GROUP BY p.ID
    ORDER BY p.post_date DESC;

    Celle-ci me permet d'obtenir tous mes posts, ainsi que leur catégorie et les meta informations liées (notamment l'image d'illustration).

    Cependant une partie de mes posts sont aussi soumis a un système de notation.

    Je peux faire la requête suivante pour obtenir cette information :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT p.ID, r.nb_vote, r.total
      FROM $wpdb->posts AS p, wp_ratings AS r
     WHERE p.ID = r.post_id

    J'aimerais pouvoir ne faire cela qu'en une seule requête, celle du début. J'avais dans un premier rajouté une clause dans le WHERE : p.ID = r.post_id, mais celle ci exclut mes posts qui ne sont pas notés...

    J'ai cherché un peu du coté des jointures externes, mais j'avoue que je manque de compréhension pour arriver à mixer le tout de manière fonctionnelle.

    Merci pour votre aide!

    Tout de bon

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Il faut utiliser la syntaxe ANSI pour les jointures internes afin de rajouter facilement la jointure externe, que donne cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT p.ID, p.post_name, p.post_excerpt, p.post_date, p.guid, t.term_id, t.slug, pm.meta_value, r.nb_vote, r.total
      FROM posts AS p  
      join term_relationships AS tr on tr.object_id = p.ID
      join term_taxonomy AS tt      on tt.term_taxonomy_id = tr.term_taxonomy_id
      join terms AS t               on t.term_id = tt.term_id
      join postmeta AS pm           on pm.post_id = p.ID
      left join wp_ratings AS r     on r.post_id = p.ID
     WHERE p.post_status = 'publish' 
       AND tt.taxonomy = 'category' 
       AND pm.meta_value LIKE '%.jpg%'
     ORDER BY p.post_date DESC
    J'ai viré le GROUP BY inutile et faux, et je ne pense pas que le % après jpg soit utile.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Yes yes yes, ca marche!

    Merci beaucoup!

    En effet ca me semble d'autant plus simple. Par contre le Group By me permet d'éviter d'avoir des doublons lorsque des posts sont dans deux catégories différentes.

    Merci encore

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par macelfresh Voir le message
    Par contre le Group By me permet d'éviter d'avoir des doublons lorsque des posts sont dans deux catégories différentes.
    Pour ça utilise DISTINCT (select distinct ....)

Discussions similaires

  1. Optimisation d'une requête SQL
    Par Michel601 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2007, 15h17
  2. [SQL] Deux requêtes SQL sur le même formulaire
    Par amazircool dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/02/2007, 02h23
  3. exécuter deux requêtes SQL à partir d'un bouton de commande
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/12/2006, 17h57
  4. Optimisation d'une requête SQL
    Par gaboo_bl dans le forum Oracle
    Réponses: 18
    Dernier message: 23/10/2006, 15h33
  5. [MySQL] Optimisation d'une requête sql
    Par fabien14 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/09/2006, 11h45

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