Meta_query confronta la spiegazione dell'operatore


37

Ho notato che ci sono molti operatori che possono essere usati per confrontare in meta_query. Tuttavia, non sono del tutto sicuro di quale operatore dovrei usare, è in qualche modo confuso come operatore =e LIKEoperatore.

Vorrei sapere che cosa significa esattamente ogni operatore e in quali condizioni dovrei usarli.

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

Grazie.

Risposte:


50

I primi diversi lavori su come ti aspetteresti:

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

LIKEe NOT LIKEsono operatori SQL che ti consentono di aggiungere simboli jolly, quindi potresti avere una meta query simile a questa:

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

Ciò restituirebbe tutti i post in cui il meta-valore "name" ha la stringa "Pat". In questo caso, "Pat" "Patricia" e "Patrick" verrebbero tutti restituiti. C'è una spiegazione tutorial non WordPress qui .

L'aggiunta del carattere jolly %non è necessaria, perché viene aggiunta per impostazione predefinita come @Herb ha detto nella sua risposta di seguito . In questo modo: $meta_value = '%' . like_escape( $meta_value ) . '%';- vedi fonte .

INe NOT INseleziona tutte le corrispondenze che sono (o non sono) nella matrice data. Quindi potresti fare qualcosa del genere:

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

e otterrebbe tutti i post con il colore impostato su rosso, verde o blu. Usando 'NOT IN' si ottiene il contrario, tutti i post che hanno un valore impostato su qualcosa di diverso da ciò che è nella matrice.

L'SQL generato per questo sarebbe simile al seguente:

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

BETWEENe NOT BETWEENti consentono di definire un intervallo di valori che potrebbero essere corretti e richiedono di fornire due valori in un array nella tua meta_query:

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

Questo ti porterà tutti i post in cui il prezzo è compreso tra 20 e 30. Questa persona scava in un esempio con le date.

NOT EXISTSè proprio come sembra: il meta valore non è impostato o è impostato su un valore nullo. Tutto ciò che serve per quella query è l'operatore chiave e confronto:

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

Questa persona aveva bisogno di interrogare meta valori inesistenti e aveva bisogno che giocassero bene con gli altri.

Spero che sia di aiuto!


Nota: se si utilizza l' meta_queryarray, non è necessario aggiungere il prefisso alle chiavi meta_. Se stai usando $query->meta_key, $query->meta_valueecc., Questi dovrebbero comunque conservare il prefisso.
Sean,

Non riesco a trovare una spiegazione su cosa faccia l'opzione di confronto "IN". Qualche idea su come funzioni?
Joe

1
@Joe, non so perché non ho aggiunto nulla su "IN" e "NOT IN". Ho modificato e aggiornato la risposta con questi confronti.
Jen

7

Si noti che quando si utilizza un valore meta_compare di 'LIKE', WordPress avvolge automaticamente il carattere jolly (%) attorno alla stringa meta_value. Quindi l'esempio 'Pat%' potrebbe non riuscire a restituire alcun risultato.


ci sono informazioni al riguardo nei documenti da qualche parte Herb? L'esempio dovrebbe cambiare per rimuovere il %?
Jen,

Dovrei, l'ho fatto proprio ora, vedere la fonte , quindi diventa molto chiaro che Herb ha ragione. @guiniveretoo
Nicolai
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.