Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ZF2 - MySQL Regex para pesquisas de palavras inteiras


Um método seria usar uma chamada MySQL REGEXP em uma expressão de predicado.

Onde $select é uma instância de Zend\Db\Sql\Select e $searchFor é o seu termo de pesquisa:

A pesquisa de substring original pode usar um where como este...
$select->where(array(
    new Predicate\PredicateSet(
        array(
            new Zend\Db\Sql\Predicate\Like('tag', '%' . $searchFor . '%'),
            new Zend\Db\Sql\Predicate\Like('title', '%' . $searchFor . '%'),
        ),
        Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
    ),
));

... e a versão de palavra inteira do acima é:
$select->where(array(
    new Predicate\PredicateSet(
        array(
            new Zend\Db\Sql\Predicate\Expression("tag REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
            new Zend\Db\Sql\Predicate\Expression("title REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
        ),
        Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
    ),
));

Observe que estas são pesquisas de vários campos, então eu fiz um PredicateSet::COMBINED_BY_OR . Demorei muito para parar de brincar com \b no meu regex. Espero que isso salve alguém lá fora algum tempo.