web-dev-qa-db-fra.com

Requête SQL pour sélectionner les publications de plusieurs catégories

J'ai construit une requête pour sélectionner des publications dans une catégorie. Fonctionne bien. Mais lorsque je choisis d'ajouter un filtre secondaire pour exclure une catégorie, la requête renvoie le même jeu de résultats, comme si le filtre de catégorie secondaire était ignoré.

Dans ce qui suit, la requête doit sélectionner tous les articles de la catégorie 7 et exclure ceux de la catégorie 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')";

Quelqu'un peut aider?

1
Riccardo

J'utiliserais l'API intégrée telle que mentionnée par Rarst. Vous pouvez faire quelque chose comme ça:

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

Vous auriez alors ces éléments dans $just_seven->posts.

Cependant, si vous DEVEZ utiliser une instruction SQL directe, nous vous suggérons d'utiliser INNER JOIN au lieu de LEFT JOIN.

1
John P Bloch