여러 메타 키 값을 쿼리 하시겠습니까?
4 대답
- 투표
-
- 2012-03-13
여기에 AND/OR 혼란이있는 것 같습니다.
OP의 쿼리는 둘 다 key1='value1'AND key2='value2'인 게시물 만 반환합니다. 어쨌든 대부분의 WP 플러그인은 동일한 키를 사용하여 동일한 게시물에 대해postmeta에 여러 값을 저장하지 않습니다.
원하는 것이 실제로 OR 인 경우 (key1='value1'인 게시물과 key1='value2'인 게시물을 얻으려면) 'IN'및 값 매개 변수에 대한 값의 배열.
또는`meta_query '에
relation
매개 변수를 제공 할 수 있습니다.$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
동일한 키를 사용하는 여러 메타 쿼리의 관계로 OR을 사용하는 것은
IN
및 단일 값에 대한 값 배열을 사용하는 것과 기능적으로 동일합니다.I feel like there's an AND/OR confusion going on here.
The queries in the OP will only return posts which have both key1 = 'value1' AND key2 = 'value2'. Most WP plugins (that I know of, anyway) do not store multiple values in postmeta, for the same post, using the same key.
If what you want is really an OR (you want to get the posts where key1 = 'value1', as well as the posts where key1 = 'value2'), then see @WhiskerSandwich's answer, using 'IN' and an array of values for the value parameter.
Alternatively, you can provide a
relation
parameter to `meta_query':$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Note that using OR as the relation for multiple meta queries using the same key is the functional equivalent of using
IN
and an array of values for a single one.-
감사합니다,분."관계"매개 변수가 존재하는지 몰랐습니다.나를 도와 주었다.Thanks for this, Boone. I didn't know the "relation" param existed. Helped me out.
- 0
- 2012-03-21
- MathSmath
-
검색 할 키가 하나만있는 경우 작동합니다.둘 이상이있는 경우 'AND'를 사용하여 관계 매개 변수에서 결합해야 할 수 있습니다.이 경우 @WhiskerSandwich의 답변이 더 적합합니다.This works if you only have one key to search on. If you have two or more, you may need to use 'AND' to combine them in the relationship parameter, in which case @WhiskerSandwich's answer below is the better fit.
- 0
- 2015-04-21
- SinisterBeard
-
- 2012-03-13
동일한 키에 대해 여러 배열을 전달하는 것이 작동하지 않는 동일한 문제가 발생했습니다.대신 하나의 배열을 사용하고 'value'를 값 배열로 설정하고 'compare'를 IN으로 설정하십시오.
<?php $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => array('value1', 'value2'), 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); ?>
I had the same problem where passing multiple arrays for the same key wasn't working. Instead, just use one array, set 'value' to an array of values, and set 'compare' to IN:
<?php $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => array('value1', 'value2'), 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); ?>
-
- 2012-01-27
두 번째 값에 대해postmeta 테이블의 별칭을 지정해야합니다.
$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
를 사용하여이 작업을 수행 할 수도 있습니다. a> :$args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $query = new WP_Query( $args );
You have to alias the postmeta table for the second value:
$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 ";
You can also do this now since 3.1 with a
meta_query
:$args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $query = new WP_Query( $args );
-
답변 해 주셔서 감사합니다.SQL은 값을 반환하지 않습니다.그리고 배열에서 두 번째 키와 값을 제거하지 않으면 배열도 값을 반환하지 않습니다.그래서이게 도청 된 건가요?Hi Milo thanks for answering. The SQL returns no value. And the array is returning no value as well unless I remove the 2nd key and value from the array. So is this bugged?
- 0
- 2012-01-27
- steen
-
@steen-문제가 무엇인지 잘 모르겠습니다. 두 가지 방법을 모두 테스트했으며 3.3.1 설치에서 작동 중입니다.키가 문자 그대로 'key1'이고 값이 'value1'및 'value2'입니까?쿼리 직후`print_r ($the_query);`하면 아무것도 표시되지 않습니까?@steen - I'm not sure what your issue is, I've tested both methods and they are working in my install of 3.3.1. Is your key literally 'key1' and values 'value1' and 'value2'? Do you see nothing if you `print_r( $the_query );` immediately after the query?
- 0
- 2012-01-27
- Milo
-
- 2012-01-27
키는 key1이고 값은 'value1'과 'value2'입니다. 새로 설치할 때 텍스트와 숫자를 모두 시도했습니다.print_r ($the_query);출력이 정상적으로 보입니다.또한 시도한 key1 및 key2도 작동하지 않습니다.하나의 어레이로 제한하자마자 작동합니다.다른 브라우저에서 확인했습니다.
하지만 작동합니다.
<사전> <코드> & lt;?php $ args=array ( 'meta_query'=>정렬( 정렬( '키'=>'wtf', '가치'=>'1', '비교'=>'>=' ), //이 배열은 두 배열 모두에 대해 반환하지 않습니다. 정렬( '키'=>'wtf', '가치'=>'2', '비교'=>'& lt;=' ) ) ); $the_query=새로운 WP_Query ($ args); ? >Key is key1 and values 'value1' and 'value2' tried it both text and numeric in a fresh install with twenty eleven. print_r( $the_query ); works output looks normal. Also tried key1 and key2 also doesn't work. It works as soon as I limit it to to one array. Checked with different browsers.
This however does work.
<?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 ); ?>
동일한 키로 여러 메타 키 값을 쿼리하는 방법
다음 코드