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';
我想通过这个查询获取帖子列表。谁能解决这个问题吗?
最佳答案
嗨@史蒂文·斯 PIL 伯格:
您的错误是指定了 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()
上找到 WP_Query
的其他参数。 Codex 页面(参数是相同的。) 您可能还需要使用其他几个参数来微调您的查询。
当然,如果您出于某种原因必须使用直接 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);
希望这有帮助。
-迈克
关于mysql - 我在 WordPress Mysql 的 MySQL 查询中哪里出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767623/