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

$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; ?>


#1 楼

我感觉这里发生了AND / OR混淆。大多数WP插件(无论如何,我都知道)不会在同一个帖子中使用相同的键在postmeta中存储多个值。 ,其中key1 ='value1'的帖子以及key1 ='value2'的帖子),然后使用@IN和value参数的值数组查看@WhiskerSandwich的答案。另外,您可以为meta_query提供一个relation参数:

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

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

使用IN和单个值的数组。

评论


谢谢你,布恩我不知道存在“关系”参数。帮助我。

–MathSmath
2012年3月21日在22:37

如果您只需要搜索一个键,则此方法有效。如果您有两个或两个以上,则可能需要在关系参数中使用“ AND”将它们组合在一起,在这种情况下,@ WhiskerSandwich的以下答案更合适。

–SinisterBeard
15年4月21日在11:58

#2 楼

我遇到了相同的问题,即无法为同一键传递多个数组。相反,仅使用一个数组,将“值”设置为值的数组,并将“比较”设置为IN:

<?php

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

?>


#3 楼

您必须为postmeta表加上第二个值的别名:

评论


您好Milo感谢您的回答。 SQL不返回任何值。除非我从数组中删除第二个键和值,否则数组也不会返回任何值。那么,这有问题吗?

–青少年
2012年1月27日下午5:48

@steen-我不确定您的问题是什么,我已经测试了这两种方法,并且它们在我的3.3.1安装中都有效。您的密钥字面意思是“ key1”,值是“ value1”和“ value2”吗?如果您使用print_r($ the_query),您什么也看不到?查询后立即进行?

–米洛
2012年1月27日6:14

#4 楼

密钥是key1,值“ value1”和“ value2”在新安装的21中尝试了文本和数字。 print_r($ the_query);作品输出看起来正常。还尝试过key1和key2也不起作用。只要将其限制为一个数组,它就会起作用。已使用其他浏览器检查。

但这确实起作用。

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

 ?>