当前位置: 首页>>技术解读>>正文


查询多个元键值?

webfans 技术解读 , 去评论

问题描述

如何使用相同的密钥查询多个元键值

$querystr = "  
            SELECT $wpdb->posts.* 
            FROM $wpdb->posts, $wpdb->postmeta
            WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 

            AND $wpdb->postmeta.meta_key = 'key1'   
            AND $wpdb->postmeta.meta_value = 'value1'
            // why doesn't this work?
            AND $wpdb->postmeta.meta_value = 'value2'

            AND $wpdb->posts.post_status = 'publish' 
            AND $wpdb->posts.post_type = 'post'
            ORDER BY $wpdb->posts.post_date DESC
                ";

下一个代码

<?php 
$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),
// this array results in no return for both arrays
        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);
$the_query  = new WP_Query( $args );
 ?>

                <?php /* Start the Loop */ ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

                    <?php get_template_part( 'content', get_post_format() ); ?>

                <?php endwhile; ?>

最佳解决方案

我觉得这里有一个AND /OR混乱。

OP中的查询仅返回具有key1 = ‘value1’和key2 = ‘value2’的帖子。大多数WP插件(我知道,无论如何)都没有在postmeta中存储多个值,对于同一个帖子,使用相同的密钥。

如果你想要的是一个OR(你想获得key1 = ‘value1’的帖子,以及key1 = ‘value2’的帖子),那么请参阅@ WhiskerSandwich的答案,使用’IN’和value参数的值数组。

或者,您可以为“meta_query”提供relation参数:

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'key1',
            'value' => 'value1',
            'compare' => '='
        ),

        array(
            'key' => 'key1',
            'value' => 'value2',
            'compare' => '='
        )
    )
);

请注意,使用OR作为使用相同键的多个元查询的关系,其功能等同于使用IN和单个值的数组。

次佳解决方案

我有同样的问题,为同一个密钥传递多个数组不起作用。相反,只需使用一个数组,将’value’设置为值数组,并将’compare’设置为IN:

<?php

$args = array(
    'meta_query' => array(
        array(
            'key' => 'key1',
            'value' => array('value1', 'value2'),
            'compare' => 'IN'
        ),
    )
);
$query = new WP_Query( $args );

?>

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2175.html,转载请务必附带本地址声明。