sql >> Databasteknik >  >> RDS >> Mysql

ZF2 - MySQL Regex för hela ordsökningar

En metod skulle vara att använda ett MySQL REGEXP-anrop i ett predikatuttryck.

Där $select är en instans av Zend\Db\Sql\Select och $searchFor är din sökterm:

Den ursprungliga delsträngssökningen kan använda en where så här...

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

...och helordsversionen av ovanstående är:

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

Observera att det här är sökningar i flera fält, så jag har gjort en PredicateSet::COMBINED_BY_OR . Det tog mig alldeles för lång tid att sluta busa med \b i mitt regex. Hoppas detta sparar någon där ute lite tid.




  1. pt-query-digest Alternatives - MySQL Query Management &Monitoring med ClusterControl

  2. Hur man använder regex i django-frågan

  3. Oracle SQL:SQL-fråga som producerar 4 gånger resultaten och data kommer inte att ordnas korrekt

  4. Hur man återställer en databas från C#