web-dev-qa-db-ja.com

複数のカテゴリから投稿を選択するためのSQLクエリ

カテゴリ内の投稿を選択するためのクエリを作成しました。正常に動作します。ただし、カテゴリを除外するためにセカンダリフィルタを追加することを選択した場合、クエリは、セカンダリカテゴリフィルタが無視されている場合と同じ結果セットを返します。

以下では、クエリはカテゴリ7の投稿をすべて選択し、カテゴリ10の投稿を除外します。

$querystr = "SELECT * 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)  

WHERE ($wpdb->term_taxonomy.term_id = 7
   AND $wpdb->term_taxonomy.term_id <> 10  
   AND $wpdb->term_taxonomy.taxonomy = 'category'   
   AND $wpdb->posts.post_type = 'post'  
   AND $wpdb->posts.post_status = 'publish')";

誰かが手伝ってくれる?

1
Riccardo

私はRarstが述べたように組み込みのAPIを使うでしょう。あなたはこのようなことをすることができます:

$just_seven = new WP_Query(
  array(
    'category__in' => array( 7 ),
    'category__not_in' => array( 10 )
  )
);

これらのアイテムは$just_seven->postsに含まれています。

ただし、直接SQLステートメントを使用する必要がある場合は、INNER JOINではなくLEFT JOINを使用することをお勧めします。

1
John P Bloch