Compter nombre de posts avec deux champs perso spécifiques (Créer un compte)

  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #470455
    geekubuntu
    Participant
    Chevalier WordPress
    286 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 2.7.1

    Problème(s) rencontré(s) :

    J’essaye de comptabiliser le nombre de posts qui ont deux champs persos spécifiques:

    <?php
    $test_count = $wpdb->get_var($wpdb->prepare(« SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key = ‘test’ AND meta_key = ‘blablabla' », $meta_key));
    echo  » . $test_count .  »;
    ?>

    ça n’a pas l’air bon, j’ai un petit 0 en résultat :(

    #673626
    arena
    Participant
    Maître WordPress
    844 contributions

    si tu regardes la query il me semble difficile que meta_key soit égal en même temps à test et à blabla !!!

    BOn c’est un peu trappu, mais ça marche !

    SELECT COUNT(*)
    FROM $wpdb->posts a
    WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’)
    AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test’)

    #673627
    geekubuntu
    Participant
    Chevalier WordPress
    286 contributions

    ça n’a pas l’air :(

    j’ai essayé:

    get_var($wpdb->prepare(« SELECT COUNT(*) FROM $wpdb->posts a WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’) AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test' », $meta_key));
    echo  » . $test_count .  »;
    ?>

    mais rien s’affiche (et il n’y a pas d’erreur) 😕

    #673628
    arena
    Participant
    Maître WordPress
    844 contributions
    get_var(« SELECT COUNT(*) FROM $wpdb->posts a WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘blablabla’) AND EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key = ‘test' »);
    echo  » . $test_count .  »;
    ?>

    #673629
    geekubuntu
    Participant
    Chevalier WordPress
    286 contributions

    pareil 😕

    #673630
    arena
    Participant
    Maître WordPress
    844 contributions

    j’ai fait le test suivant : j’ai créé un post avec 2 champs perso avec comme CLE : blablabla et test

    et lorsque j’ai executé la requete, j’ai obtenu : 1

    #673631
    geekubuntu
    Participant
    Chevalier WordPress
    286 contributions

    oups je crois que j’ai mal expliqué :( , en fait je n’ai pas de posts qui ont les deux champs en même temps!

    j’ai un groupe de posts qui a donc « blablabla », et un autre groupe qui a « test », et donc je veux comptabiliser ces deux groupes 🙂

    ++

    #673632
    arena
    Participant
    Maître WordPress
    844 contributions

    SELECT COUNT(*)
    FROM $wpdb->posts a
    WHERE EXISTS (SELECT meta_id FROM $wpdb->postmeta WHERE post_id = a.ID AND meta_key in ( ‘blablabla’, ‘test’))

    pour comptabiliser les posts qui ont ou blablabla ou test ou les deux

    #673633
    geekubuntu
    Participant
    Chevalier WordPress
    286 contributions

    merci c’est bon :p

    #673634
    Comme une image
    Participant
    Maître WordPress
    2493 contributions

    Je propose une méthode alternative :

    SELECT COUNT(DISTINCT(a.ID))
    FROM $wpdb->posts a
    JOIN $wpdb->postmeta p ON p.post_id = a.ID
    WHERE p.meta_key in ( ‘blablabla’, ‘test’) ;

    Ce serait intéressant de bencher les deux requêtes, j’ai fait un « EXPLAIN » mais je ne suis pas assez bon pour comprendre le résultat ! J’aurais tendance à penser qu’une jointure est plus efficace qu’une requête imbriquée, mais si un expert SQL pourrait me foutre la honte en mettant à plat ma belle théorie, j’en serais ravi et ça me ferait progresser !!!

    (Une méthode de base, ce serait de noter le temps de réponse de chacune des requêtes, mais avec les effets de cache, cette méthode pourrait être hasardeuse.)

10 sujets de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.