riccardo
  • 0
Новичок

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

  • 0

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

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

Кто-нибудь может помочь?

Share
  1. По какой-то конкретной причине вам нужно сделать это с помощью необработанного SQL вместо использования функций API?

    • 0
    • Принято, однако кажется медленнее, чем использование необработанного запроса…. в любом случае спасибо

      • 0
    • Я подтверждаю, что использование WP_Query замедляет выполнение запроса, чистый оператор SELECT работает быстрее…. Есть ли способ ускорить WP_query?

      • 0
    • Что действительно замедляет розыгрыш банка, так это подход IN. Гораздо быстрее выбрать сообщения, принадлежащие к ОДНОЙ категории, и исключить нежелательные из них позже в цикле….

      • 0
    • Это не обязательно медленнее. Если вы используете обычные API-интерфейсы WordPress, вы можете использовать методы кэширования, которые плагины могут использовать для повышения скорости этих API, так что это намного быстрее, чем прямой запрос к базе данных. Другое преимущество использования WP_Query вместо прямого SQL-запроса заключается в том, что он автоматически может создавать цикл WordPress, экономя ваше время на настройке всех глобальных переменных и позволяя использовать теги шаблона.

      • 0
    • Истинный. В моем случае я разработал тему с нуля, поэтому это не было серьезной проблемой. Что определенно может препятствовать подходу SELECT, так это структура таблиц; это означает дополнительное тестирование каждый раз, когда выпускаются основные выпуски WP.

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

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

    Тогда у вас будут эти элементы в $just_seven->posts .

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

    • 0

Оставить ответ

You must login to add an answer.