我需要获取类别1和类别2中最后一篇文章的ID和post\\u互动程序,并排除类别3中的内容。它必须是SQL,因为如果我使用WP\\u Query,它检索的信息太多,我只需要ID和post\\u标题。
以下查询可以很好地从这两个类别中获取帖子,但如果我尝试排除第三个类别,它将不起作用:
select distinct p.ID, p.post_title
from wp_posts p,
wp_terms t, wp_term_taxonomy tt, wp_term_relationships tr,
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationships tr2
where p.id = tr.object_id
and t.term_id = tt.term_id
and tr.term_taxonomy_id = tt.term_taxonomy_id
and p.id = tr2.object_id
and t2.term_id = tt2.term_id
and tr2.term_taxonomy_id = tt2.term_taxonomy_id
and (tt.taxonomy = \'category\' and tt.term_id = t.term_id and t.term_id = 15)
and (tt2.taxonomy = \'category\' and tt2.term_id = t2.term_id and t2.term_id = 5)
ORDER BY p.ID DESC
LIMIT 0, 60
有什么帮助吗?
提前感谢:)
SO网友:Max Yudin
你必须使用LEFT JOIN
来简化这些东西。顺便说一下,可以使用WP_Query
我真的不明白你为什么不想用它。
此外,我还更改了您编写查询的方式,并且没有使用硬编码$table_prefix
让答案对其他人也有用。您可以替换$wpdb->
具有wp_
在里面$query
如果你想的话。
我想你有第三类ID=1000
(参见NOT IN
零件号):
<?php
global $wpdb;
$query = "
SELECT ID, post_title
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON (ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.taxonomy = \'category\'
AND $wpdb->term_taxonomy.term_id IN(15, 5)
AND $wpdb->term_taxonomy.term_id NOT IN(1000)
ORDER BY ID DESC
LIMIT 0, 60
";
$results = $wpdb->get_results($query);
foreach($results as $result) {
echo $result->ID;
echo \'<br />\';
echo $result->post_title;
echo \'<hr />\';
}
SO网友:Olsen
非常感谢Steve和Max的回复:)
我尝试了Max回答我的查询,但它检索(15或5)中的帖子,而不是(1000)中的帖子。但我需要的是:输入(15和5),而不是输入(1000)。
最后,我使用参数“fields”=>“ids”使用WP\\u Query,在使用get\\u title($post->ID)之后获取post\\u标题。
因此,最终对我有效的查询是:
<?php
$query = array(
\'post_status\' => \'publish\',
\'order\' => \'DESC\',
\'orderby\' => \'ID\',
\'posts_per_page\' => \'60\',
\'post_type\' => \'post\',
\'category__not_in\' => \'47\',
\'category__and\' => array(5,15),
\'fields\' => \'ids\'
);
非常感谢!