query SQL per selezionare i messaggi di più categorie
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?
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