Mysql
 sql >> Base de données >  >> RDS >> Mysql

ZF2 - MySQL Regex pour les recherches de mots entiers

Une méthode consisterait à utiliser un appel MySQL REGEXP dans une expression de prédicat.

$select est une instance de Zend\Db\Sql\Select et $searchFor est votre terme de recherche :

La recherche de sous-chaîne d'origine peut utiliser un endroit comme celui-ci...

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

...et la version en mot entier de ce qui précède est :

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

Notez que ce sont des recherches multi-champs, j'ai donc fait un PredicateSet::COMBINED_BY_OR . Il m'a fallu beaucoup trop de temps pour arrêter de m'amuser avec \b dans ma regex. J'espère que cela fera gagner du temps à quelqu'un.