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

ZF2 - MySQL Regex til hele ordsøgninger

En metode ville være at bruge et MySQL REGEXP-kald i et prædikatudtryk.

Hvor $select er en forekomst af Zend\Db\Sql\Select og $searchFor er dit søgeord:

Den oprindelige understrengsøgning kan bruge en where som denne...

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

...og helordsversionen af ​​ovenstående er:

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

Bemærk, at dette er søgninger med flere felter, så jeg har lavet et PredicateSet::COMBINED_BY_OR . Det tog mig alt for lang tid at stoppe med at fjolle rundt med \b i mit regex. Håber dette sparer nogen derude lidt tid.




  1. Konverter en UTC-tidszone i postgresql til EST (lokal tid)

  2. Sådan vælger du poster, der ikke findes i SQL Server

  3. MySQL SIGN() Funktion – Find ud af, om et tal er positivt eller negativt i MySQL

  4. Er følgende forespørgsel mulig med SQL Pivot?