Spiegazione dell'operatore di confronto meta_query
Ho notato che ci sono diversi operatori che possono essere utilizzati per il confronto in meta_query.
Tuttavia, non sono del tutto sicuro su quale operatore dovrei utilizzare, è un po' confuso come gli operatori =
e LIKE
.
Vorrei sapere esattamente cosa significa ciascun operatore e in quali condizioni dovrei utilizzarli.
= // Uguale a
!= // Non uguale a
> // Maggiore di
>= // Maggiore o uguale a
< // Minore di
<= // Minore o uguale a
LIKE // Contiene
NOT LIKE // Non contiene
IN // Presente nell'elenco
NOT IN // Non presente nell'elenco
BETWEEN // Compreso tra
NOT BETWEEN // Non compreso tra
NOT EXISTS // Non esiste
Grazie.

I primi operatori funzionano come ci si aspetterebbe:
= uguale
!= non uguale
> maggiore di
>= maggiore o uguale a
< minore di
<= minore o uguale a
LIKE e NOT LIKE
LIKE
e NOT LIKE
sono operatori SQL che permettono di utilizzare caratteri jolly, quindi potresti avere una meta query simile a questa:
array(
'key' => 'nome',
'value' => 'Pat',
'compare' => 'LIKE'
)
Questo restituirebbe tutti i post dove il meta valore "nome" contiene la stringa "Pat". In questo caso, verrebbero restituiti "Pat", "Patricia" e "Patrick". C'è un tutorial non-WordPress che spiega questo concetto qui.
Non è necessario aggiungere il carattere jolly %
, perché viene aggiunto automaticamente come ha detto @Herb nella sua risposta qui sotto. In questo modo: $meta_value = '%' . like_escape( $meta_value ) . '%';
- vedi fonte.
IN e NOT IN
IN
e NOT IN
selezionano qualsiasi corrispondenza che sia (o non sia) nell'array fornito. Quindi potresti fare qualcosa del genere:
array(
'key' => 'colore',
'value' => array('rosso', 'verde', 'blu')
'compare' => 'IN'
)
e otterresti tutti i post che hanno il colore impostato su rosso, verde o blu. Usando 'NOT IN' ottieni l'opposto, tutti i post che hanno un valore diverso da quelli nell'array.
Il SQL generato per questo sarebbe qualcosa del genere:
SELECT * FROM posts_meta WHERE value IN ("rosso", "verde", "blu")
BETWEEN e NOT BETWEEN
BETWEEN
e NOT BETWEEN
permettono di definire un intervallo di valori che possono essere corretti, e richiedono di fornire due valori in un array nella tua meta_query:
array(
'key' => 'prezzo',
'value' => array(20,30)
'compare' => 'BETWEEN'
)
Questo ti darà tutti i post dove il prezzo è compreso tra 20 e 30. Questa persona approfondisce un esempio con le date.
NOT EXISTS
NOT EXISTS
è esattamente come sembra - il meta valore non è impostato o è impostato su un valore nullo. Tutto ciò che serve per questa query è la chiave e l'operatore di confronto:
array(
'key' => 'prezzo',
'compare' => 'NOT EXISTS'
)
Questa persona aveva bisogno di interrogare valori meta non esistenti e di farli funzionare bene con altri.
Spero che questo sia utile!

Nota: Se stai usando l'array meta_query
, le tue chiavi non dovrebbero essere prefissate con meta_
. Se invece stai usando $query->meta_key
, $query->meta_value
, ecc., allora questi dovrebbero mantenere il prefisso.

Non riesco a trovare una spiegazione su cosa faccia l'opzione di confronto "IN". Qualcuno sa come funziona?

@Joe, non so perché non avessi aggiunto nulla riguardo a "IN" e "NOT IN". Ho modificato e aggiornato la risposta con questi confronti.

Questa è una risposta ottima ma ci sono alcune opzioni aggiuntive disponibili ora-: https://codex.wordpress.org/Class_Reference/WP_Meta_Query

c'è qualche informazione a riguardo nella documentazione Herb? Dovremmo modificare l'esempio rimuovendo il %
?

Sì dovremmo, infatti l'ho appena fatto, guarda il sorgente, così diventa molto chiaro che Herb ha ragione. @guiniveretoo
