Mysql
 sql >> Database >  >> RDS >> Mysql

ZF2 - MySQL Regex per ricerche di parole intere

Un metodo potrebbe essere quello di utilizzare una chiamata MySQL REGEXP in un'espressione predicata.

Dove $select è un'istanza di Zend\Db\Sql\Select e $searchFor è il tuo termine di ricerca:

La ricerca della sottostringa originale potrebbe utilizzare un dove come questo...

$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 la versione a parole intere di quanto sopra è:

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

Nota che si tratta di ricerche multi-campo, quindi ho eseguito un PredicateSet::COMBINED_BY_OR . Mi ci è voluto troppo tempo per smettere di scherzare con \b nella mia espressione regolare. Spero che questo faccia risparmiare tempo a qualcuno là fuori.