鉴于:你在ZF2模型运作的子搜索。 你是怎么做到把它转换成一个整词搜索?
Answer 1:
一种方法是在谓词表达式中使用MySQL的REGEXP电话。
其中$select
是一个实例Zend\Db\Sql\Select
和$searchFor
是你的搜索词:
原来的字符串搜索可能会使用这样的地方...
$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
),
));
......与上述全字的版本是:
$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
),
));
注意,这些多领域的搜索,所以我已经做了PredicateSet::COMBINED_BY_OR
。 我花了太长时间停止与鬼混\b
在我的正则表达式。 希望这可以节省有人在那里一段时间。
文章来源: ZF2 - MySQL Regex for Whole word searches