Domanda

I hanno costruito una query per selezionare i messaggi all'interno di una categoria. Funziona bene. Ma quando ho scelto di aggiungere un filtro secondario per escludere una categoria, la query restituiscono lo stesso set di risultati, come se il filtro di categoria secondaria viene ignorato.

Nel seguente query dovrebbe selezionare tutti i messaggi nella categoria 7 ed escludere quelli della categoria 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')";

Qualcuno può aiutarmi?

È stato utile?

Soluzione

Vorrei utilizzare il costruito nel API come Rarst menzionato. Si potrebbe fare qualcosa di simile:

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

Si dovrebbe quindi gli elementi in $just_seven->posts.

Tuttavia, se è necessario utilizzare un'istruzione SQL diretta, suggerirei usando INNER JOIN invece di LEFT JOIN.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top