我已经建立了一个查询来选择类别内的帖子。工作正常。但是,当我选择添加辅助过滤器以排除类别时,查询返回相同的结果集,就好像忽略了辅助类别过滤器一样。
在以下情况下,查询应选择类别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\')";
有人能帮忙吗?
最合适的回答,由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
.