Meta_query 비교 연산자 설명


37

meta_query에서 비교에 사용할 수있는 연산자가 있다는 것을 알았습니다. 그러나 어떤 연산자를 사용 해야하는지 잘 모르겠습니다. 어떻게 연산자 =와 혼란 스럽습니다 LIKE.

각 연산자가 정확히 무엇을 의미하는지, 어떤 조건에서 사용해야하는지 알고 싶습니다.

=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS

감사.

답변:


50

첫 번째 몇 가지 작업은 다음과 같습니다.

=   equals
!=  does not equal
>   greater than
>=  greater than or equal to
<   less than
<=  less than or equal to

LIKE그리고 NOT LIKE당신이 메타 쿼리를 가질 수 있도록, 와일드 카드 기호에 추가 할 수 있도록 SQL 사업자는 그 다음과 같다 :

array( 
    'key' => 'name', 
    'value' => 'Pat', 
    'compare' => 'LIKE'
)

메타 값 "name"에 "Pat"문자열이있는 모든 게시물을 반환합니다. 이 경우 "Pat" "Patricia"및 "Patrick"이 모두 귀하에게 반환됩니다. WordPress 이외의 튜토리얼 설명이 있습니다 .

%@Herb가 아래 답변 에서 언급 한 것처럼 기본적으로 와일드 카드 문자를 추가하면 와일드 카드 문자를 추가 할 필요가 없습니다 . 이와 같이 : $meta_value = '%' . like_escape( $meta_value ) . '%';- 소스 참조 .

INNOT IN(또는 생략)에 지정된 배열되어있는 일치를 선택. 따라서 다음과 같이 할 수 있습니다.

array(
    'key'     => 'color', 
    'value'   => array('red', 'green', 'blue') 
    'compare' => 'IN'
)

색상이 빨간색, 녹색 또는 파란색으로 설정된 모든 게시물을 가져옵니다. 'NOT IN'을 사용하면 배열에있는 것 이외의 값으로 설정된 게시물이 반대로됩니다.

이를 위해 생성 된 SQL은 다음과 같습니다.

SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue") 

BETWEEN그리고 NOT BETWEEN당신이 올바른 될 수있는 값의 범위를 정의하고 meta_query의 배열에 두 개의 값을 제공하도록 요구 할 수 있습니다 :

array( 
    'key' => 'price', 
    'value' => array(20,30) 
    'compare' => 'BETWEEN'
)

이렇게하면 가격이 20에서 30 사이 인 모든 게시물을 얻을 수 있습니다. 이 사람 은 날짜가 포함 된 예를 찾습니다.

NOT EXISTS메타 값이 설정되지 않았거나 null 값으로 설정되어 있습니다. 해당 쿼리에 필요한 것은 키 및 비교 연산자입니다.

array( 
    'key' => 'price', 
    'compare' => 'NOT EXISTS'
)

이 사람 은 존재하지 않는 메타 값을 쿼리해야했고 다른 사람과 잘 플레이해야했습니다.

도움이 되었기를 바랍니다!


참고 : meta_query배열을 사용하는 경우 키 앞에 접두사를 붙여서는 안됩니다 meta_. 당신이 사용하는 경우 $query->meta_key, $query->meta_value등 다음이 여전히 접두사를 유지해야한다.
Sean

"IN"비교 옵션의 기능에 대한 설명을 찾을 수없는 것 같습니다. 어떻게 작동하는지 아십니까?
Joe

1
@Joe, 나는 왜 "IN"과 "NOT IN"에 대해 아무 것도 추가하지 않았다. 그 비교를 통해 답변을 편집하고 업데이트했습니다.
Jen

7

meta_compare 값 'LIKE'를 사용할 때 WordPress는 meta_value 문자열 주위에 와일드 카드 문자 (%)를 자동으로 감 쌉니다. 따라서 'Pat %'예제는 결과를 반환하지 못할 수 있습니다.


허브 어딘가에 문서에 대한 정보가 있습니까? 예를 변경하여 %?
Jen

실제로 실제로 그렇게 했으므로 소스를 참조하십시오. 그러면 Herb가 옳다는 것이 매우 분명해집니다. @guiniveretoo
Nicolai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.