Привет @ Стивен Спилберг:
Ваша ошибка заключалась в том, что вы указали 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);
Надеюсь, это поможет.
-Майк