是否查询多个元键值?

时间:2012-01-27 作者:steen

如何用同一个键查询多个元键值

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

4 个回复
SO网友:Boone Gorges

我觉得这里有一种和/或混乱。

OP中的查询将只返回同时具有键1=“value1”和键2=“value2”的帖子。大多数WP插件(据我所知,无论如何)都不会在Posteta中使用同一个键为同一篇文章存储多个值。

如果您想要的是一个OR(您想要得到key1=\'value1\'的帖子,以及key1=\'value2\'的帖子),那么请参阅@wickrsandwich的答案,使用“IN”和value参数的值数组。

或者,您可以提供relation “meta\\u查询”的参数:

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

        array(
            \'key\' => \'key1\',
            \'value\' => \'value2\',
            \'compare\' => \'=\'
        )
    )
);
请注意,使用或作为使用相同键的多个元查询的关系在功能上等同于使用IN 以及单个值的值数组。

SO网友:WhiskerSandwich

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

<?php

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

?>

SO网友:Milo

对于第二个值,您必须将Posteta表别名为:

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

        AND $wpdb->postmeta.meta_key = \'key1\'   
        AND $wpdb->postmeta.meta_value = \'value1\'
        AND mt1.meta_key = \'key1\'
        AND mt1.meta_value = \'value2\'

        AND $wpdb->posts.post_status = \'publish\' 
        AND $wpdb->posts.post_type = \'post\'
        ORDER BY $wpdb->posts.post_date DESC
            ";
从3.1开始,您现在也可以使用meta_query:

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

SO网友:steen

键是key1,值“value1”和“value2”在新安装的211中尝试了文本和数字。print\\u r($the\\u query);works输出看起来正常。还尝试了按键1,按键2也不起作用。只要我将其限制为一个数组,它就会工作。使用不同的浏览器进行检查。

然而,这确实有效。

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

 ?>

结束

相关推荐

JQuery树视图和wp_list_ages

我想用jQuery TreeView 在wp\\u list\\u页面上编写脚本,以获得良好的可折叠树效果。脚本要求我向列表元素添加一些类,例如:<ul id=\"red\" class=\"treeview-red\"> 所以我试着把这个放在我的模板中:首先,通过wp\\u enqueue\\u script()在我的模板页面上加载脚本wp_enqueue_script(\"av_jquery_tree\"); get_header(); 其中,插件中定义了“av