Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从类别数组中选择帖子,而不是在其他类别数组中选择帖子?_Php_Mysql_Sql_Wordpress - Fatal编程技术网

Php 如何从类别数组中选择帖子,而不是在其他类别数组中选择帖子?

Php 如何从类别数组中选择帖子,而不是在其他类别数组中选择帖子?,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,以下是我努力实现的目标: 我有一篇属于a、B、C、D类的文章。我想显示属于a类的文章,但我不想显示属于C类的文章。因此,如果我运行查询,我希望不显示属于a、B、C、D类的文章,因为它也属于C类。我将如何实现这一点 $notInCategories = array(103,106,132,102,10,57,58,28,48); $args = array( 'post_type' => 'post',

以下是我努力实现的目标:

我有一篇属于a、B、C、D类的文章。我想显示属于a类的文章,但我不想显示属于C类的文章。因此,如果我运行查询,我希望不显示属于a、B、C、D类的文章,因为它也属于C类。我将如何实现这一点

  $notInCategories = array(103,106,132,102,10,57,58,28,48);    
    $args = array(
                            'post_type' => 'post',
                            'post_status' => 'publish',
                            'order_by' => 'ID',
                            'tax_query' => array(
                            'relation' => 'AND',
                                    array(
                                            'taxonomy' => 'category',
                                            'field'    => 'id',
                                            'terms'    => array('10','11','12')
                                    ),
                                    array(
                                            'taxonomy' => 'category',
                                            'field'    => 'id',
                                            'terms'    => $notInCategories,
                                            'operator' => 'NOT IN',
                                    ),
                            ),
                            'meta_query' => array( 
                                'relation' => 'AND',
                                        array(
                                         'key' => 'joke_type',                 
                                         'value' => $type,                 
                                         'type' => 'CHAR',                 
                                         'compare' =>  '='
                                     ),
                                         array(
                                             'key' => 'joke_rating',
                                             'value' => 3,
                                             'type' => 'SIGNED',
                                             'compare' => '>='
                                         )
                             ) 
                    );
                    $myquery = new WP_Query( $args );
                    echo '<p>REQUEST:'.$myquery->request.'</p>';

稍后编辑:我现在理解了为什么它对term_taxonomy_id的打印方式不同。这是因为term_taxonomy_id与category id不同。term_taxonomy_id是表term_taxonomy中的term_id的category id和term_关系中的object_id的post之间的连接,我不明白这是为什么不排除这些类别。

尝试在php文件中使用以下代码

$args = array(
    'post_type' => 'post',
    'posts_per_page'=> your_desired_number_of_post,
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array( 'your_category_here' ),
        ),
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array( 'your_category_to_exclude_here' ),
            'operator' => 'NOT IN',
        ),
    ),
);
$query = new WP_Query( $args );
我希望这有帮助


嗯。

您可以使用group by和Have做您想做的事情。要将复杂的问题与简单的问题联系起来有点困难。但是,假设包含ID列表的表是wp_njkf_term_relationships,那么您需要如下内容:

select tr.object_id
from wp_njkf_term_relationships tr
group by tr.object_id
having sum(tr.term_taxonomy_id in (139, 133, 45, 135) ) > 0 and
       sum(tr.term_taxonomy_id in (103, 106, 132, 102, 10, 57, 58, 28, 48) ) = 0;

我建议您一次添加一个逻辑表的其余部分。

您对使用子查询有何看法:

SELECT * FROM (SELECT * FROM table WHERE category IN ('A') ) AS posts_category_a WHERE category NOT IN ('C') 
我有4个帖子,分别是:post1、post1.1、post2和post3

所有员额都属于类别1、类别2和类别3

post1.1仅属于类别1

当我运行代码时,结果只包含一个post,该post是post1.1


我希望这对您有所帮助。

当我必须检查它们是否不在这些特定类别中时,我最终使用了这一方法:

$args = array(
                            'orderby' =>'rand',
                        'post_type' => 'post',
                        'post_status' => 'publish',
                        'posts_per_page' => 10,
                        'order_by' => 'ID',
                        'category__not_in' => $notInCategories,
                        'meta_query' => array( 
                                    'relation' => 'AND',
                                    array(
                                     'key' => 'joke_type',                 
                                     'value' => $type,                 
                                     'type' => 'CHAR',                 
                                     'compare' =>  '='
                                 ),
                                     array(
                                         'key' => 'joke_rating',
                                         'value' => 3,
                                         'type' => 'SIGNED',
                                         'compare' => '>='
                                     )
                         ),
                         'fields' => 'ids' 
                );
当他们需要在特定的类别中时:

$args = array(
                        'orderby' =>'rand',
                        'post_type' => 'post',
                        'post_status' => 'publish',
                        'posts_per_page' => 10,
                        'order_by' => 'ID',
                        'category__in' => $categories,
                        'meta_query' => array( 
                                    'relation' => 'AND',
                                    array(
                                     'key' => 'joke_type',                 
                                     'value' => $type,                 
                                     'type' => 'CHAR',                 
                                     'compare' =>  '='
                                 ),
                                     array(
                                         'key' => 'joke_rating',
                                         'value' => 3,
                                         'type' => 'SIGNED',
                                         'compare' => '>='
                                     )
                         ),
                         'fields' => 'ids' 
                );

这是更多的代码,但最终一个if成功了。。我很想理解为什么我之前的尝试没有成功,但我想这仍然是Wordpress的谜团。

嗨,我尝试使用WP_Query,而不是使用wpdb尝试SQL,但是由于某些原因,当我输出请求时,我输入的类别数组与查询得到的不同。这就是我复制SQL的原因,我尝试手动执行此操作。请参阅我稍后的编辑。。你能解释一下为什么我为分类查询输入的类别在调用wp_查询时发生了变化吗?我添加了一个新的答案。我测试了它,我想它会成功的。我很高兴你知道OP想要什么。我不知道@草莓我尽力解释:如果你阅读了代码上面的部分,它会准确地解释我需要什么。@Gordon-谢谢你的回答,但我不擅长SQL查询,老实说,我不知道如何更改代码,我必须使用你建议的方法。我正在尝试再次使用WP_query,也许我可以弄清楚为什么WP query会更改我发送给categories checkHi的id,我的问题是我必须使用id,因为它是使用category id的大型程序的一部分。。当我使用以下代码时:数组'taxonomy'=>'category'、'field'=>'id'、'terms'=>array10,11,12,SQL在11,12,13[…]中读取[…]为什么它会更改id的I输入?显然,SQL是通过向id添加一个id来读取id的。你能发布所有的SQL语句和你的php代码WP_查询吗?嗨,请看编辑。我添加了我现在使用的代码和打印的SQL字符串。你能解释一下你的元查询吗?那么,$type在'key'=>'joke\u type'、'value'=>$type'中指的是什么?它是一种笑话类型,在Wordpress中设置了一个自定义字段。。基本上是由这些内容组成的字符串:“笑话”、“模因”、“视频”、“卡通”、“gif”。如果是我,我会提供一些示例数据和期望的结果——尽可能保持示例的清晰和简洁。
$args = array(
                            'orderby' =>'rand',
                        'post_type' => 'post',
                        'post_status' => 'publish',
                        'posts_per_page' => 10,
                        'order_by' => 'ID',
                        'category__not_in' => $notInCategories,
                        'meta_query' => array( 
                                    'relation' => 'AND',
                                    array(
                                     'key' => 'joke_type',                 
                                     'value' => $type,                 
                                     'type' => 'CHAR',                 
                                     'compare' =>  '='
                                 ),
                                     array(
                                         'key' => 'joke_rating',
                                         'value' => 3,
                                         'type' => 'SIGNED',
                                         'compare' => '>='
                                     )
                         ),
                         'fields' => 'ids' 
                );
$args = array(
                        'orderby' =>'rand',
                        'post_type' => 'post',
                        'post_status' => 'publish',
                        'posts_per_page' => 10,
                        'order_by' => 'ID',
                        'category__in' => $categories,
                        'meta_query' => array( 
                                    'relation' => 'AND',
                                    array(
                                     'key' => 'joke_type',                 
                                     'value' => $type,                 
                                     'type' => 'CHAR',                 
                                     'compare' =>  '='
                                 ),
                                     array(
                                         'key' => 'joke_rating',
                                         'value' => 3,
                                         'type' => 'SIGNED',
                                         'compare' => '>='
                                     )
                         ),
                         'fields' => 'ids' 
                );