Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ZF2 - MySQL Regex für die Suche nach ganzen Wörtern

Eine Methode wäre die Verwendung eines MySQL REGEXP-Aufrufs in einem Prädikatsausdruck.

Wobei $select ist eine Instanz von Zend\Db\Sql\Select und $searchFor ist Ihr Suchbegriff:

Die ursprüngliche Substring-Suche könnte ein where wie dieses verwenden...

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

... und die Ganzwortversion des Obigen ist:

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

Beachten Sie, dass dies Mehrfeldsuchen sind, also habe ich ein PredicateSet::COMBINED_BY_OR durchgeführt . Ich habe viel zu lange gebraucht, um mit \b aufzuhören in meiner Regex. Ich hoffe, das spart jemandem da draußen etwas Zeit.