Spiegazione dell'operatore di confronto meta_query

29 ott 2012, 19:47:40
Visualizzazioni: 182K
Voti: 63

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.

0
Tutte le risposte alla domanda 2
5
103

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!

29 ott 2012 20:48:22
Commenti

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.

Sean Sean
20 ago 2014 17:25:09

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

Joe Joe
9 mar 2015 16:50:07

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

Jen Jen
9 mar 2015 18:05:40

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

noelmcg noelmcg
28 ago 2020 13:38:24

'EXISTS' , 'REGEXP', 'NOT REGEXP' e 'RLIKE'

noelmcg noelmcg
28 ago 2020 13:39:17
2
13

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

13 ott 2013 23:13:00
Commenti

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

Jen Jen
22 nov 2013 17:47:01

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

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