Come usare LIKE per pattern all'inizio o fine stringa in meta_query WordPress
Ho una custom WP_Query con la seguente meta_query:
$meta_query = array();
$meta_query['relation'] = 'AND';
if(!empty($postcode)) {
$meta_query[] = array(
'key' => 'postcode',
'value' => $postcode,
'compare' => 'LIKE'
);
}
if(!empty($email)) {
$meta_query[] = array(
'key' => 'email_address',
'value' => $email,
'compare' => 'LIKE'
);
}
Il problema è che WordPress avvolge ogni valore meta con %%
per usarli come parte del confronto LIKE
nella query, ad esempio WHERE meta_value LIKE '%hello@example.com%'
È possibile configurare una meta_query in modo che venga usato solo un segno di percentuale, per verificare se un valore inizia o finisce con una determinata frase? Ad esempio WHERE meta_value LIKE 'hello@%'

Potresti provare la versione con REGEXP
:
'meta_query' => array(
array(
'key' => 'email_address',
'value' => '^hello@',
'compare' => 'REGEXP',
)
)
dove ^
corrisponde all'inizio di una stringa.
Puoi consultare il riferimento MYSQL su REGEXP
qui per maggiori informazioni.
Nota che questi sono i valori possibili del parametro compare
per i meta:
'=', '!=', '>', '>=', '<', '<=',
'LIKE', 'NOT LIKE','IN', 'NOT IN',
'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS',
'REGEXP', 'NOT REGEXP', 'RLIKE'
secondo il sorgente di WordPress 3.9.2.
Dal riferimento MYSQL:
Nome Descrizione
------------------------------------------------------
NOT REGEXP Negazione di REGEXP
REGEXP Pattern matching usando espressioni regolari
RLIKE Sinonimo di REGEXP

Ottimo materiale, grazie mille. È un peccato che non elenchino REGEXP
come valore di confronto valido nella documentazione (Da http://codex.wordpress.org/Class_Reference/WP_Meta_Query I valori possibili sono '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (solo in WP >= 3.5), e 'NOT EXISTS' (anche solo in WP >= 3.5). Il valore predefinito è '='.
)

Ho aggiornato il Codex con questi parametri aggiuntivi: REGEXP
, NOT REGEXP
e RLIKE
.
