где я иду неправильно в этом запросе MySQL для WordPress Mysql? - PullRequest
0 голосов
/ 22 января 2011
SELECT * FROM wp_posts 
   INNER JOIN wp_term_relationships 
           ON ( wp_posts.ID = wp_term_relationships.object_id)
   INNER JOIN wp_term_relationships 
           ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id 
        WHERE term_id = 1 AND taxonomy  = 'category';

Я хочу получить список сообщений с помощью этого запроса. Может кто-нибудь может решить этот вопрос?

1 Ответ

2 голосов
/ 22 января 2011

Привет @ Стивен Спилберг:

Ваша ошибка заключалась в том, что вы указали wp_term_relationships дважды вместо указания wp_term_relationships один раз и wp_term_taxonomy один раз.Вот рабочий запрос:

SELECT * FROM wp_posts 
   INNER JOIN wp_term_relationships 
           ON wp_posts.ID = wp_term_relationships.object_id
   INNER JOIN wp_term_taxonomy
           ON wp_term_taxonomy.term_taxonomy_id = 
              wp_term_relationships.term_taxonomy_id 
        WHERE term_id = 1 AND taxonomy  = 'category';

Однако, если вы планируете использовать его в файле .php для использования с WordPress, я бы порекомендовал вам использовать другой подход, такой как WP_Query иначиная с этого:

$term = get_term_by('id',1);
$query = new WP_Query(array(
  'taxonomy'=>'category',
  'term'=>$term->slug,
));
print_r($query->posts);  

Вы можете найти другие аргументы для WP_Query на query_posts() странице Кодекса (аргументы одинаковы.) ТамЕсть несколько других аргументов, которые вы, вероятно, захотите использовать для точной настройки вашего запроса.

Конечно, если вам по какой-то причине необходимо использовать прямой SQL, то, по крайней мере, используйте объект $wpdb, чтобы у вас не былобеспокоиться о префиксах, например:

  global $wpdb;
  $sql = <<<SQL
SELECT * FROM {$wpdb->posts} 
   INNER JOIN {$wpdb->term_relationships} 
           ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id
   INNER JOIN {$wpdb->term_taxonomy}
           ON {$wpdb->term_taxonomy}.term_taxonomy_id = 
              {$wpdb->term_relationships}.term_taxonomy_id 
        WHERE 1=1
          AND {$wpdb->term_taxonomy}.term_id = 1 
          AND {$wpdb->term_taxonomy}.taxonomy  = 'category'
SQL;
  $posts = $wpdb->get_results($sql);

Надеюсь, это поможет.

-Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...