我正在尝试为我的自定义插件和帖子类型获取数据表单数据库。我的查询参数应该像
$args = array(
'post_type' => 'products',
'post_status'=> 'publish',
'meta_query' => array(
'relation' => 'OR',
array( 'key'=>'product_commercial',
'value'=>'on',
'compare'=>'='
),
array( 'key'=>'product_exterior',
'value'=>'on',
'compare'=>'='
)
)
);
$search_query = new WP_Query( $args );
但是我正在尝试动态添加元键值,例如:
$inner_arrays=array();
$count = 0;
foreach($values as $value){
if($value){
$inner_arrays[$count]['key'] .= $value;
$inner_arrays[$count]['value'] .= 'on';
$inner_arrays[$count]['compare'] .= '=';
$count++;
}
}
$args = array(
'post_type' => 'products',
'post_status'=> 'publish',
'meta_query' => array(
'relation' => 'OR',
$inner_arrays
)
);
//值是一些随机值(例如从db获取)。
现在当我使用打印查询时 echo "<pre>Last SQL-Query: {$search_query->request}".'<br/>';
它显示
Last SQL-Query: SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) INNER JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1 AND (
(
( wp_postmeta.meta_key = 'product_commercial' AND CAST(wp_postmeta.meta_value AS CHAR) = 'on' )
**AND**
( mt1.meta_key = 'product_framed' AND CAST(mt1.meta_value AS CHAR) = 'on' )
**AND**
( mt2.meta_key = 'product_horizontal' AND CAST(mt2.meta_value AS CHAR) = 'on' )
)
) AND wp_posts.post_type = 'products' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10
问题:我正在使用“ relation => OR ”,但是在SQL查询中却得到“ AND ”。我在哪里做错了?
$args['meta_query']
被分配以下内容:
array(
'relation' => 'OR',
$inner_arrays
)
如果要进行检查(例如通过进行检查)print_r( $args['meta_query'] );
,则会看到:
Array ( [relation] => OR [0] => Array ( [0] => Array ( key => product_commercial, value => on, compare => = ), [1] => Array ( key => product_exterior, 值=>开启, 比较=> = ) ) )
换句话说,该$inner_arrays
数组本身已成为的子数组$args['meta_query']
。如“自定义字段参数”中所述:
重要提示:
meta_query
需要一个数组元的查询参数的数组(它需要一个数组的数组) -你可以在下面的例子中看到这一点。通过此结构,您可以使用relation
第一个(外部)数组中的参数来描述元查询之间的布尔关系,从而查询多个元数据。接受的参数为“ AND”,“ OR”。默认值为“ AND”。
因此要结合您的要素$inner_arrays
使用默认的关系AND
,而随后的结果相结合的是与任何其他成员$args['meta_query']
(没有任何)使用的明确关系OR
。
相反,您必须要么追加每个元素的$inner_arrays
到meta_query
,否则只设置$inner_arrays['relation'] = 'OR'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句