एक तरीका यह होगा कि प्रेडिकेट एक्सप्रेशन में 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
. के साथ बेवकूफ बनाना बंद करने में बहुत समय लगा मेरे रेगेक्स में। आशा है कि यह किसी को वहाँ कुछ समय बचाएगा।