SQL-запрос для выбора записей из нескольких категорий


Я создал запрос для выбора сообщений в категории. Работает нормально. Но когда я решаю добавить дополнительный фильтр для исключения категории, запрос возвращает тот же набор результатов, как если бы фильтр дополнительной категории игнорировался.

В следующем запросе следует выбрать все сообщения в категории 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')";

Может ли кто-нибудь помочь?

Author: Riccardo, 2010-10-11

1 answers

Я бы использовал встроенный API, как упоминалось ранее. Вы могли бы сделать что-то вроде этого:

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

Затем у вас будут эти предметы в $just_seven->posts.

Однако, если вам НЕОБХОДИМО использовать прямую инструкцию SQL, я бы предложил использовать INNER JOIN вместо LEFT JOIN.

 1
Author: John P Bloch, 2010-10-11 16:07:09