Explicarea operatorilor de comparație meta_query

29 oct. 2012, 19:47:40
Vizualizări: 182K
Voturi: 63

Am observat că există mai mulți operatori care pot fi folosiți pentru comparație în meta_query. Cu toate acestea, nu sunt sigur ce operator ar trebui să folosesc, este oarecum confuz, cum ar fi operatorii = și LIKE.

Aș dori să știu exact ce înseamnă fiecare operator și în ce condiții ar trebui să îi folosesc.

= 		  	  // egal cu
!= 		  	  // diferit de
> 		  	  // mai mare decât
>= 		  	  // mai mare sau egal cu
< 		  	  // mai mic decât
<= 		  	  // mai mic sau egal cu
LIKE 	  	  // conține șirul specificat
NOT LIKE 	  // nu conține șirul specificat
IN 		  	  // valoarea există în array
NOT IN 	  	  // valoarea nu există în array
BETWEEN 	  // între două valori
NOT BETWEEN   // nu este între două valori
NOT EXISTS    // metakey-ul nu există

Mulțumesc.

0
Toate răspunsurile la întrebare 2
5
103

Primele câteva funcționează așa cum v-ați aștepta:

=   egal
!=  nu este egal
>   mai mare decât
>=  mai mare sau egal cu
<   mai mic decât
<=  mai mic sau egal cu



LIKE și NOT LIKE

LIKE și NOT LIKE sunt operatori SQL care vă permit să adăugați simboluri wild-card, astfel încât să puteți avea o interogare meta care arată astfel:

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

Aceasta va returna toate articolele în care valoarea meta "name" conține șirul "Pat". În acest caz, "Pat", "Patricia" și "Patrick" vor fi returnate. Există un tutorial non-WordPress care explică mai multe aici.

Adăugarea caracterului wildcard % nu este necesară, deoarece este adăugat implicit, așa cum a menționat @Herb în răspunsul său de mai jos. Astfel: $meta_value = '%' . like_escape( $meta_value ) . '%'; - vezi sursa.



IN și NOT IN

IN și NOT IN selectează potrivirile care sunt (sau nu sunt) în array-ul dat. Deci, puteți face ceva de genul:

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

și va obține toate articolele care au culoarea setată la roșu, verde sau albastru. Utilizarea 'NOT IN' va returna inversul, orice articole care au o valoare setată la altceva decât ceea ce este în array.

SQL-ul generat pentru aceasta ar arăta cam așa:

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



BETWEEN și NOT BETWEEN

BETWEEN și NOT BETWEEN vă permit să definiți un interval de valori care ar putea fi corecte și vă cer să furnizați două valori într-un array în meta_query:

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

Aceasta vă va returna toate articolele în care prețul este între 20 și 30. Această persoană explorează un exemplu cu date.



NOT EXISTS

NOT EXISTS este exact cum sună - valoarea meta nu este setată sau este setată la o valoare nulă. Tot ce aveți nevoie pentru această interogare este cheia și operatorul de comparație:

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

Această persoană a avut nevoie să interogheze valori meta inexistente și a avut nevoie să funcționeze bine cu altele.

Sper că acest lucru vă ajută!

29 oct. 2012 20:48:22
Comentarii

Notă: Dacă folosești un array meta_query, cheile tale nu ar trebui să fie prefixate cu meta_. Dacă folosești $query->meta_key, $query->meta_value, etc., atunci acestea ar trebui să păstreze prefixul.

Sean Sean
20 aug. 2014 17:25:09

Nu reușesc să găsesc o explicație despre ce face opțiunea de comparare "IN". Ai vreo idee cum funcționează?

Joe Joe
9 mar. 2015 16:50:07

@Joe, nu știu de ce nu am adăugat nimic despre "IN" și "NOT IN". Am editat și actualizat răspunsul cu acele comparații.

Jen Jen
9 mar. 2015 18:05:40

Acesta este un răspuns excelent, dar acum există câteva opțiuni suplimentare -: https://codex.wordpress.org/Class_Reference/WP_Meta_Query

noelmcg noelmcg
28 aug. 2020 13:38:24

'EXISTS' , 'REGEXP', 'NOT REGEXP' și 'RLIKE'

noelmcg noelmcg
28 aug. 2020 13:39:17
2
13

Rețineți că atunci când utilizați o valoare meta_compare de tip 'LIKE', WordPress înfășoară automat caracterul wildcard ( % ) în jurul șirului meta_value. Astfel, exemplul 'Pat%' ar putea să nu returneze niciun rezultat.

13 oct. 2013 23:13:00
Comentarii

există informații despre asta în documentație pe undeva, Herb? Ar trebui să modificăm exemplul pentru a elimina %?

Jen Jen
22 nov. 2013 17:47:01

Da, ar trebui. De fapt, tocmai am făcut asta acum - vezi sursa, atunci devine foarte clar că Herb are dreptate. @guiniveretoo

Nicolai Grossherr Nicolai Grossherr
8 apr. 2014 18:10:49