用于从多个类别中选择帖子的SQL查询

时间:2010-10-11 作者:Riccardo

我已经建立了一个查询来选择类别内的帖子。工作正常。但是,当我选择添加辅助过滤器以排除类别时,查询返回相同的结果集,就好像忽略了辅助类别过滤器一样。

在以下情况下,查询应选择类别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 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

我会使用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.

结束