我在wordpress Mysql的MySQL查询中出错了吗?

时间:2011-01-22 11:45:48

标签: mysql wordpress

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 个答案:

答案 0 :(得分:2)

你好 @steven spielberg:

您的错误是您指定了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);  

您可以在query_posts() Codex页上找到WP_Query的其他参数(参数相同。)您可能还想使用其他几个参数微调您的查询。

当然如果由于某种原因必须使用直接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