web-dev-qa-db-fra.com

Méta-requête avec une chaîne commençant comme un motif

J'ai un WP_Query personnalisé avec la meta_query suivante:

$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'
    );
}

Le problème est que WordPress encapsule chaque méta-valeur dans %% à utiliser dans le cadre de la comparaison LIKE dans la requête, par exemple WHERE meta_value LIKE '%[email protected]%'.

Est-il possible de configurer une meta_query afin qu'un seul signe de pourcentage soit utilisé, afin que nous puissions vérifier si une valeur commence par ou se termine par une phrase? par exemple WHERE meta_value LIKE 'hello@%'

5
Andy

Vous pouvez essayer la version REGEXP:

    'meta_query' => array(
        array(
            'key'       => 'email_address',
            'value'     => '^hello@',
            'compare'   => 'REGEXP',
        )
    )

^ correspond au début d'une chaîne.

Vous pouvez vérifier la référence MYSQL sur REGEXPici pour plus d’informations.

Notez que ce sont les valeurs possibles du paramètre meta compare:

'=', '!=', '>', '>=', '<', '<=', 
'LIKE', 'NOT LIKE','IN', 'NOT IN', 
'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 
'REGEXP', 'NOT REGEXP', 'RLIKE'

selon WordPress 3.9.2 source .

De la MYSQL ref :

Name        Description
------------------------------------------------------
NOT REGEXP  Negation of REGEXP
REGEXP      Pattern matching using regular expressions
RLIKE       Synonym for REGEXP
12
birgire