Meta_query 비교 연산자 설명
2 대답
- 투표
-
- 2012-10-29
첫 번째 몇 가지 작업은 다음과 같습니다.
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE 및 NOT LIKE
LIKE
및NOT LIKE
는 와일드 카드 기호를 추가 할 수있는 SQL 연산자이므로 다음과 같은 메타 쿼리를 가질 수 있습니다.array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
이것은 메타 값 "name"에 문자열 "Pat"이있는 모든 게시물을 반환합니다. 이 경우 "Pat" "Patricia"및 "Patrick"이 모두 귀하에게 반환됩니다. 여기 에 비 WordPress 자습서 설명이 있습니다.
와일드 카드 문자
%
를 추가 할 필요는 없습니다. @Herb가 아래 답변 . 다음과 같이 :$meta_value = '%' . like_escape( $meta_value ) . '%';
- 출처 .
IN 및 NOT IN
IN
및NOT 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
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' )
이 사람 은 메타 값이 존재하며 다른 사람들과 잘 어울리는 데 필요했습니다.
도움이 되었기를 바랍니다.
The first several work as you would expect:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE and NOT LIKE
LIKE
andNOT LIKE
are SQL operators that let you add in wild-card symbols, so you could have a meta query that looks like this:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
This would return all posts where the meta value "name" has the string "Pat". In this case, "Pat" "Patricia" and "Patrick" would all be returned back to you. There's a non-WordPress tutorial explanation here.
Adding the wildcard character
%
isn't necessary, because it gets added by default like @Herb said in his below answer. Like this:$meta_value = '%' . like_escape( $meta_value ) . '%';
- see source.
IN and NOT IN
IN
andNOT IN
select any matches that are in (or not in) the given array. So you could do something like this:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
and it would get all posts that have the color set to either red, green, or blue. Using 'NOT IN' gets the reverse, any posts that have a value set to anything else than what's in the array.
The generated SQL for this would look something like this:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN and NOT BETWEEN
BETWEEN
andNOT BETWEEN
allow you to define a range of values that could be correct, and require you to give two values in an array in your meta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
This will get you all posts where the price is between 20 and 30. This person digs into an example with dates.
NOT EXISTS
NOT EXISTS
is just like what it sounds - the meta value isn't set or is set to a null value. All you need for that query is the key and comparison operator:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
This person needed to query non-existent meta values, and needed them to play nice with others.
Hope this helps!
-
참고 :`meta_query` 배열을 사용하는 경우 키에`meta_` 프리픽스를 붙이면 안됩니다.`$ query->meta_key`,`$ query->meta_value` 등을 사용하는 경우 여전히 접두사를 유지해야합니다.Note: If you're using `meta_query` array, your keys should not be prefixed with `meta_`. If you're using `$query->meta_key`, `$query->meta_value`, etc. then these should still retain the prefix.
- 1
- 2014-08-20
- Sean
-
"IN"비교 옵션이 수행하는 작업에 대한 설명을 찾을 수없는 것 같습니다.어떻게 작동하는지 아십니까?I can't seem to find an explanation on what the "IN" compare option does. Any idea how that works?
- 0
- 2015-03-09
- Joe
-
@Joe,"IN"과 "NOT IN"에 대해 아무것도 추가하지 않은 이유를 모르겠습니다.나는 그 비교로 대답을 편집하고 업데이트했습니다.@Joe, I don't know why I didn't add anything about "IN" and "NOT IN". I've edited and updated the answer with those comparisons.
- 2
- 2015-03-09
- Jen
-
이것은 훌륭한 답변이지만 현재 사용 가능한 몇 가지 옵션이 더 있습니다. https://codex.wordpress.org/Class_Reference/WP_Meta_QueryThis is a great answer but there are some more options available now-: https://codex.wordpress.org/Class_Reference/WP_Meta_Query
- 0
- 2020-08-28
- noelmcg
-
'EXISTS','REGEXP','NOT REGEXP'및 'RLIKE''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
'LIKE'의meta_compare 값을 사용할 때 WordPress는 자동으로meta_value 문자열을 와일드 카드 문자 (%)로 감 쌉니다.따라서 'Pat %'예제는 결과를 반환하지 못할 수 있습니다.
Note that when using a meta_compare value of 'LIKE', WordPress automatically wraps the wildcard character ( % ) around the meta_value string. So the 'Pat%' example could fail to return any results.
-
Herb 어딘가에 문서에 그것에 대한 정보가 있습니까?`%`를 제거하려면 예제를 변경해야합니까?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
지금 당장 그렇게했습니다. [source] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841)를 참조하세요.Herb가 옳다는 것이 매우 분명해졌습니다.안녕하세요.It should, I actually did that right now, see the [source](https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841), then it gets very clear that Herb is right. @guiniveretoo
- 0
- 2014-04-08
- Nicolai
meta_query에서 비교에 사용할 수있는 연산자가 많다는 것을 알았습니다. 그러나 어떤 연산자를 사용해야하는지 잘 모르겠습니다.
=
및LIKE
연산자와 같이 다소 혼란 스럽습니다.각 연산자가 정확히 무엇을 의미하는지,어떤 조건에서 사용해야하는지 알고 싶습니다.
<사전> <코드>= != > >= & lt; & lt;= 처럼 같지 않은 에 안 중에서 사이가 아님 존재하지 않음감사합니다.