字符串以LIKE模式开头的元查询

时间:2014-08-28 作者:Andy

我有一个自定义的WP\\u查询,其中包含以下meta\\u查询:

$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]%\'

是否可以设置meta\\u查询,以便只使用一个百分号,以便我们可以检查值是以短语开头还是以短语结尾?e、 g级WHERE meta_value LIKE \'hello@%\'

1 个回复
最合适的回答,由SO网友:birgire 整理而成

你可以试试REGEXP 版本:

    \'meta_query\' => array(
        array(
            \'key\'       => \'email_address\',
            \'value\'     => \'^hello@\',
            \'compare\'   => \'REGEXP\',
        )
    )
在哪里^ 匹配字符串的开头。

您可以在上检查MYSQL引用REGEXP here 了解更多信息。

请注意,这些是possible values 元的compare 参数:

\'=\', \'!=\', \'>\', \'>=\', \'<\', \'<=\', 
\'LIKE\', \'NOT LIKE\',\'IN\', \'NOT IN\', 
\'BETWEEN\', \'NOT BETWEEN\', \'NOT EXISTS\', 
\'REGEXP\', \'NOT REGEXP\', \'RLIKE\'
根据WordPress 3.9.2source.

从MYSQLref:

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

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post