sql >> Database >  >> RDS >> Mysql

ZF2 - MySQL Regex voor zoeken op hele woorden

Een methode zou zijn om een ​​MySQL REGEXP-aanroep in een predicaatexpressie te gebruiken.

Waar $select is een instantie van Zend\Db\Sql\Select en $searchFor is uw zoekterm:

De oorspronkelijke zoekopdracht op subtekenreeksen kan een waar gebruiken zoals deze...

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

...en de volledige woordversie van het bovenstaande is:

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

Merk op dat dit zoekopdrachten in meerdere velden zijn, dus ik heb een PredicateSet::COMBINED_BY_OR gedaan . Het kostte me veel te lang om te stoppen met rotzooien met \b in mijn regex. Ik hoop dat dit iemand tijd bespaart.




  1. Vernieuw inhoud automatisch als de database verandert

  2. Sqlite 3 Invoegen en vervangen mislukt op meer dan 1 unieke kolom

  3. FOUT:kon bestand pg_tblspc/4815857/PG_11_201809051/16321 niet uitbreiden:geen ruimte over op het apparaat

  4. 10 nuttige bronnen voor wie meer wil weten over SQL