web-dev-qa-db-ja.com

カスタムクエリnum_rowsが誤った金額を返す

だから私は与えられたカテゴリ内のすべての投稿を取得するカスタムクエリを持っています。返された行数を取得しようとしていますが、間違った数が返されています。

11の代わりに、私は14を取得しています。誰もが理由を知っていますか?

<?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;
?>

私の回避策はリソースの浪費のようです。もっと効率的なものはありますか?

1
Sweepster

特定のカテゴリのすべての公開された投稿の総数を知りたい場合は、これを試すことができます。

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

または

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

'category_name'または 'cat'を目的のカテゴリに置き換えてください。

1
Joshua Abenazer