Meta_query porównuje wyjaśnienie operatora

37

Zauważyłem, że istnieje wiele operatorów, których można użyć do porównania w meta_query. Nie jestem jednak pewien, jakiego operatora powinienem użyć, jest to niejasne jak operator =i LIKE.

Chciałbym wiedzieć, co dokładnie oznacza każdy operator i w jakim stanie powinienem ich używać.

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

Dzięki.

dev-jim
źródło

Odpowiedzi:

50

Kilka pierwszych działa tak, jak można się spodziewać:

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

LIKEi NOT LIKEsą operatorami SQL, które pozwalają dodawać symbole wieloznaczne, dzięki czemu można uzyskać zapytanie meta, które wygląda następująco:

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

Zwróciłoby to wszystkie posty, w których wartość meta „name” ma ciąg „Pat”. W takim przypadku „Pat”, „Patricia” i „Patrick” zostaną zwrócone. Istnieje zakaz WordPress samouczek wyjaśnienie tutaj .

Dodanie znaku wieloznacznego %nie jest konieczne, ponieważ jest ono dodawane domyślnie, jak powiedział @Herb w poniższej odpowiedzi . W ten sposób: $meta_value = '%' . like_escape( $meta_value ) . '%';- patrz źródło .

INi NOT INwybierz dowolne dopasowania, które znajdują się w danej tablicy (lub jej nie ma). Więc możesz zrobić coś takiego:

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

i otrzyma wszystkie posty, których kolor jest ustawiony na czerwony, zielony lub niebieski. Użycie „NOT IN” powoduje odwrócenie, wszystkie posty, których wartość jest ustawiona na cokolwiek innego niż to, co znajduje się w tablicy.

Wygenerowany SQL dla tego wyglądałby mniej więcej tak:

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

BETWEENi NOT BETWEENpozwalają zdefiniować zakres wartości, które mogą być poprawne, i wymagają podania dwóch wartości w tablicy w meta_query:

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

Otrzymasz wszystkie posty, których cena wynosi od 20 do 30. Ta osoba kopie w przykład z datami.

NOT EXISTSjest tak jak brzmi - meta wartość nie jest ustawiona lub jest ustawiona na wartość null. Do tego zapytania potrzebujesz tylko operatora klucza i porównania:

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

Ta osoba musiała zapytać o nieistniejące meta wartości i potrzebowała ich do miłej zabawy z innymi.

Mam nadzieję że to pomoże!

Jen
źródło
Uwaga: Jeśli używasz meta_querytablicy, klucze nie powinny być poprzedzone przedrostkiem meta_. Jeśli używasz $query->meta_key, $query->meta_valueitp następnie powinny one nadal zachowują prefiks.
Sean
Nie mogę znaleźć wyjaśnienia, co robi opcja porównania „IN”. Wiesz, jak to działa?
Joe
1
@Joe, nie wiem, dlaczego nie dodałem nic o „IN” i „NOT IN”. Zredagowałem i zaktualizowałem odpowiedź za pomocą tych porównań.
Jen
7

Zauważ, że używając wartości meta_compare „LIKE”, WordPress automatycznie otacza znak wieloznaczny (%) wokół ciągu meta_value. Przykład „Pat%” może nie zwrócić żadnych wyników.

bobbingwide
źródło
czy jest jakieś informacje na ten temat w dokumentacji gdzieś Herb? Czy przykład powinien się zmienić, aby usunąć %?
Jen
Powinienem, właściwie zrobiłem to teraz, zobaczyć źródło , wtedy staje się bardzo jasne, że Herb ma rację. @guiniveretoo
Nicolai