web-dev-qa-db-fra.com

Requête personnalisée num_rows renvoie un montant incorrect

J'ai donc une requête personnalisée qui récupère tous les messages dans une catégorie donnée. J'essaie d'obtenir le nombre de lignes renvoyées, mais cela ne me donne pas le bon nombre.

Au lieu de 11, j'en reçois 14. Quelqu'un sait-il pourquoi?

<?php
$pageposts = $wpdb->get_results($wpdb->prepare("
    SELECT * FROM $wpdb->posts
    LEFT JOIN userContests ON ($wpdb->posts.ID = userContests.contestID)
    LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    WHERE $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'post' 
    AND $wpdb->posts.post_date < NOW() 
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->term_taxonomy.term_id IN(3)
    ORDER BY $wpdb->posts.post_date DESC
    "), OBJECT);

/*   $rows = $wpdb->num_rows;  <------ Wrongly returns 14 */

/*   $rows = $wpdb->get_var($wpdb->prepare("      <--------- Correctly returns 11
        SELECT COUNT(*) FROM $wpdb->posts
        LEFT JOIN userContests ON ($wpdb->posts.ID = userContests.contestID)
        LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
        LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
        WHERE $wpdb->posts.post_status = 'publish' 
        AND $wpdb->posts.post_type = 'post' 
        AND $wpdb->posts.post_date < NOW() 
        AND $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->term_taxonomy.term_id IN(3)
        ORDER BY $wpdb->posts.post_date DESC")); */
echo "Number of rows = " .$rows;
?>

Mon travail semble être un gaspillage de ressources. Y a-t-il quelque chose de plus efficace?

1
Sweepster

Si vous voulez le nombre total de tous les articles publiés dans une catégorie particulière, vous pouvez essayer ceci.

$all_posts = new WP_Query( array( 'posts_per_page' => -1, 'post_status' => 'publish', 'cat' => 3 ) );
echo $all_posts->post_count;

ou

$all_posts = new WP_Query( array( 'posts_per_page' => -1, 'post_status' => 'publish', 'category_name' => 'uncategorized' ) );
echo $all_posts->post_count;

Assurez-vous simplement de remplacer le 'category_name' ou le 'chat' par la catégorie souhaitée.

1
Joshua Abenazer