使用META_QUERY一次比较具有多个值的字段

时间:2015-01-18 作者:drake035

我在比较trip_region 我的自定义字段trip CPT到数组的第一个元素:$filter_region[0].

但是,该数组中可能有更多元素,我需要选择trips 谁的trip_region 字段等于这些元素中的任何一个。是否可以使用meta\\u查询(使用OR,而不是AND)一次将字段与多个值进行比较?因为这里没有这样的东西the doc.

$get_trips_region = get_posts(array(
    \'post_type\' => \'trip\',
    \'meta_query\' => array(
        array(
            \'key\' => \'trip_region\', 
            \'value\' => \'"\' . $filter_region[0] . \'"\', 
            \'compare\' => \'LIKE\'
        )
    )
));
编辑:

这是我的新代码,可能更接近解决方案,但没有返回任何结果:

$get_trips_region = get_posts(array(
    \'post_type\' => \'trip\',
    \'meta_query\' => array(
        array(
            \'key\' => \'trip_region\', 
            \'value\' => array($filter_region[0], $filter_region[1]), 
            \'compare\' => \'IN\'
        )
    )
));
编辑(2):

将get\\u posts替换为WP\\u Query,并使用WP\\u Query的request属性,我看到这里正在执行以下SQL查询:

SELECT SQL_CALC_FOUND_ROWS wp_15_posts.ID FROM wp_15_posts INNER JOIN wp_15_postmeta ON (wp_15_posts.ID = wp_15_postmeta.post_id) WHERE 1=1 AND wp_15_posts.post_type = \'trip\' AND (wp_15_posts.post_status = \'publish\' OR wp_15_posts.post_status = \'private\') AND ( (wp_15_postmeta.meta_key = \'trip_region\' AND CAST(wp_15_postmeta.meta_value AS CHAR) IN (\'47\',\'46\',\'45\')) ) GROUP BY wp_15_posts.ID ORDER BY wp_15_posts.post_date DESC LIMIT 0, 10
我猜相关段落是:(wp_15_postmeta.meta_key = \'trip_region\' AND CAST(wp_15_postmeta.meta_value AS CHAR) IN (\'47\',\'46\',\'45\'))

看起来不错,我不明白为什么它不起作用。与工作版本相同的段落:LIKE \'%\\"45\\"%\'

1 个回复
SO网友:Sjors Roelofs

参数“meta\\u query”是一个数组,因此可以添加多个元键。在里面the doc, 截面下方"Example: Multiple Meta Entries - Multi dimensional array", 您可以找到一个将关系设置为“或”的示例:

$query_args = array( \'meta_query\' => array(
\'relation\' => \'OR\',
array(
    \'key\' => \'foo_key\',
    // \'value\' => \'foo\',
    // \'compare\' => \'LIKE\',
),
array(
    \'key\' => \'bar_key\',
),
) );
[...]
结果查询将是:

\'join\' => string \' INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id\' (length=60)
\'where\' => string \' AND (wp_postmeta.meta_key = \'foo_key\' OR wp_postmeta.meta_key = \'bar_key\' )\'
(length=75)
如果要使用同一键检查多个值,可以使用数组并使用“IN”进行比较:

array(
    \'key\' => \'foo_key\',
    \'value\' => array(\'foo\', \'bar\'),
    \'compare\' => \'IN\'
),

结束

相关推荐