用于从多个类别但不在一个类别中获取帖子的SQL查询

时间:2013-02-19 作者:Olsen

我需要获取类别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
有什么帮助吗?

提前感谢:)

2 个回复
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\'
);
非常感谢!

结束

相关推荐

插件jQuery版本与主题jQuery版本:搜索最佳实践

我已经构建了一个基于jQuery的Wordpress插件,我正在使用wp_enqueue_script(\'jquery\');让一切顺利。假设Wordpress加载的jQuery的默认版本是1.7.2,如果用户基于不同版本的jQuery安装主题,会发生什么情况?What version of jQuery will run in the page where the plugin is called: jQuery的默认版本(我使用的是wp_enqueue_脚本(\'jQuery\'))还是主题中调用的