web-dev-qa-db-ja.com

Patternのような文字列で始まるメタクエリ

次のmeta_queryを持つカスタムWP_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'
    );
}

これに関する問題は、WordPressが%%の各メタ値を、クエリのLIKE比較の一部として使用するためにラップしていることです。例えばWHERE meta_value LIKE '%[email protected]%'

パーセント記号を1つだけ使用するようにmeta_queryを設定することは可能ですか。そのため、値が句で始まるか句で終わるかを確認できますか?例:WHERE meta_value LIKE 'hello@%'

5
Andy

REGEXPバージョンを試すことができます:

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

^は文字列の先頭に一致します。

詳細については、REGEXPここ にあるMYSQLリファレンスを確認できます。

これらはmeta compareパラメータの 可能な値 です。

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

wordPress 3.9.2によると ソース

MYSQLから 参照

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