wake-up-neo.net

Meta-Abfrage mit einem String, der wie ein Muster beginnt

Ich habe eine benutzerdefinierte WP_Query mit der folgenden 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'
    );
}

Das Problem dabei ist, dass WordPress jeden Meta-Wert in %% einhüllt, um ihn als Teil des LIKE-Vergleichs in der Abfrage zu verwenden, z. B. WHERE meta_value LIKE '%[email protected]%'

Ist es möglich, eine meta_query so einzurichten, dass nur ein Prozentzeichen verwendet wird, damit wir überprüfen können, ob ein Wert mit einer Phrase beginnt oder mit dieser endet? z. B. WHERE meta_value LIKE '[email protected]%'

5
Andy

Sie können die Version REGEXP ausprobieren:

    'meta_query' => array(
        array(
            'key'       => 'email_address',
            'value'     => '^[email protected]',
            'compare'   => 'REGEXP',
        )
    )

dabei stimmt ^ mit dem Anfang einer Zeichenfolge überein.

Sie können die MYSQL-Referenz auf REGEXPhier für weitere Informationen überprüfen.

Beachten Sie, dass dies die möglichen Werte des Parameters meta compare sind:

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

nach dem WordPress 3.9.2 Quelle .

Aus dem MYSQL ref :

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