sql >> Databáze >  >> RDS >> Mysql

ZF2 - MySQL Regex pro vyhledávání celých slov

Jednou z metod by bylo použití volání MySQL REGEXP v predikátovém výrazu.

Kde $select je instancí Zend\Db\Sql\Select a $searchFor je váš hledaný výraz:

Původní hledání podřetězců může používat kde jako je toto...

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

...a celá verze výše uvedeného je:

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

Všimněte si, že se jedná o vyhledávání ve více polích, takže jsem provedl PredicateSet::COMBINED_BY_OR . Trvalo mi příliš dlouho, než jsem přestal dovádět s \b v mém regulárním výrazu. Doufám, že to někomu ušetří čas.




  1. Bezpečně ukládejte HTML v DB bez ovlivnění kódování znaků

  2. Postgres:Jak převést řetězec json na text?

  3. GROUP BY vrátí první záznam

  4. Připojení k MySQL z .NET pomocí SSH.NET Library