2011-01-22 4 views
0
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'; 

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

+0

Что не работает? –

ответ

2

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

Ваша ошибка в том, что вы указали 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 на Codex странице 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); 

Надеется, что это помогает.

-Mike

+0

спасибо, но я решил это другим способом. –

+0

@steven spielberg - Как? – MikeSchinkel

Смежные вопросы