sql >> Base de Datos >  >> RDS >> Mysql

ZF2 - MySQL Regex para búsquedas de palabras completas

Un método sería utilizar una llamada REGEXP de MySQL en una expresión de predicado.

Donde $select es una instancia de Zend\Db\Sql\Select y $searchFor es su término de búsqueda:

La búsqueda de subcadena original podría usar un lugar 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
    ),
));

...y la versión de palabra completa de lo anterior es:

$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
    ),
));

Tenga en cuenta que estas son búsquedas de varios campos, por lo que hice un PredicateSet::COMBINED_BY_OR . Me tomó demasiado tiempo dejar de perder el tiempo con \b en mi expresión regular. Espero que esto le ahorre tiempo a alguien.