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';
我想通过此查询获取帖子列表。任何人都可以解决这个问题吗?
答案 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