web-dev-qa-db-ja.com

$ wpdb:3つの異なる分類法における3つの用語に対応する投稿数のカウント

例を挙げれば簡単です。

カスタム投稿タイプMYPOSTTYPEがあり、3つの分類法 TAX_1 TAX_2 があります。 TAX_3

用語が3つある場合: TAX_1 の 'TERM_TAX_1'、 TAX_2 の 'TERM_TAX_2'、の 'TERM_TAX_3' ] TAX_3 、SQLクエリと$ wpdbを使用して、3つの用語すべてを持つMYPOSTTYPEの数をどのように数えることができますか?

私はこのような何かを試してみましたが、それは動作していません...カウンターは常に0です

SELECT COUNT($wpdb->posts.ID) AS counter
FROM $wpdb->posts 
    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)
    LEFT JOIN $wpdb->terms AS tax_one ON ($wpdb->term_taxonomy.term_id = tax_one.term_id)
    LEFT JOIN $wpdb->terms AS tax_two ON ($wpdb->term_taxonomy.term_id = tax_two.term_id)
    LEFT JOIN $wpdb->terms AS tax_three ON ($wpdb->term_taxonomy.term_id = tax_three.term_id)
WHERE 1=1
    AND $wpdb->posts.post_type = 'MYPOSTTYPE'
    AND $wpdb->posts.post_status = 'publish'
    AND $wpdb->term_taxonomy.taxonomy  IN ('TAX_1', 'TAX_2', 'TAX_3')
    AND tax_one.slug = 'TERM_TAX_1' 
    AND tax_two.slug = 'TERM_TAX_1'
    AND tax_three.slug = 'TERM_TAX_1'

UPDATE: tax_query でも試しましたが、この問題がありました get_postsの問題、 tax_queryと投稿数のカウント

だから私はデータベースに直接クエリを実行しようとしたかった

1
Stefano

tax-query を実行してから、結果をcountにします。何十ものJOINSを持つカスタムクエリは必要ありません。

$posts = new WP_Query( array(
    'post_type' => 'MYPOSTTYPE', 
    'tax_query' => array(     
        array(         
            'taxonomy' => 'TAX_1',
            'field'    => 'slug',         
            'terms'    => array( 'TERM_TAX_1' ),
            'operator' => 'IN'
        ),
        array(
            // etc.
        )
    ),
    'post_status' => 'publish'
);
prinft(
     '<h3>COUNT: %s</h3>'
    ,count( $posts )
);
2
kaiser

MySQLではwhere句にクエリをネストすることができるので、このようなクエリでもうまくいくはずです。

SELECT COUNT($wpdb->posts.ID) AS counter
FROM $wpdb->posts 
    INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE
    $wpdb->term_taxonomy.taxonomy = 'TAX_1'
    AND $wpdb->terms.slug = 'TERM_TAX_1'
    AND $wpdb->posts.ID IN ( SELECT $wpdb->posts.ID
FROM $wpdb->posts
    INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE
    $wpdb->term_taxonomy.taxonomy = 'TAX_2'
    AND $wpdb->terms.slug = 'TERM_TAX_2'
    AND $wpdb->posts.ID IN ( SELECT $wpdb->posts.ID
FROM $wpdb->posts 
    INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE
    $wpdb->posts.post_type = 'MYPOSTTYPE'
    AND $wpdb->posts.post_status = 'publish'
    AND $wpdb->term_taxonomy.taxonomy = 'TAX_3'
    AND $wpdb->terms.slug = 'TERM_TAX_3'
))
0
Mridul Aggarwal