Mysql
 sql >> Baza danych >  >> RDS >> Mysql

ZF2 - MySQL Regex do wyszukiwania całych słów

Jedną z metod byłoby użycie wywołania MySQL REGEXP w wyrażeniu predykatu.

Gdzie $select jest instancją Zend\Db\Sql\Select i $searchFor to wyszukiwane hasło:

Oryginalne wyszukiwanie podciągów może używać miejsca takiego jak to...

$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 wersja całego słowa powyższego to:

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

Zauważ, że są to wyszukiwania wielopolowe, więc wykonałem PredicateSet::COMBINED_BY_OR . Zajęło mi zbyt dużo czasu, aby przestać wygłupiać się z \b w moim wyrażeniu regularnym. Mam nadzieję, że to oszczędzi komuś trochę czasu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:efektywnie wypełniaj tabelę w ramach procedury składowanej

  2. Jak liczyć dane w Javie MySQL

  3. Tworzenie pustego wiersza dla powtarzającego się wiersza

  4. mysql-connector-java-8.0.12 :pojawia się błąd dla strefy czasowej serwera „Czas standardowy półwyspu malajskiego”

  5. PHP wstawia wiele tablic pól wyboru ORAZ pól tekstowych do bazy danych MySQL