इसे करने के दो तरीके हैं। पहला बल्कि स्पष्ट दृष्टिकोण है। मान लें कि आपके पास वे सभी शब्द हैं, जिन्हें $necessaryWords नामक सरणी में प्रकट होने की आवश्यकता है:
$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';
foreach ($necessaryWords as $word)
$sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string
हालांकि, %foo%
. का उपयोग करते हुए बल्कि धीमा है, क्योंकि किसी भी अनुक्रमणिका का उपयोग नहीं किया जा सकता है, इसलिए इस क्वेरी के कारण बड़ी तालिकाओं और/या आवश्यक शब्दों की एक बड़ी संख्या के साथ प्रदर्शन संबंधी समस्याएं हो सकती हैं।
दूसरा तरीका होगा FULLTEXT
subject
. पर अनुक्रमणिका और body
. आप पूर्ण पाठ का उपयोग कर सकते हैं MATCH IN BOOLEAN MODE
इस तरह:
$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';
foreach ($necessaryWords as $word)
$sql .= ' +' . $word;
$sql .= '")';
ध्यान दें कि आपकी तालिका को अद्यतन:MySQL 5.6 के अनुसार
, MyISAM
. का उपयोग करना चाहिए FULLTEXT
. का उपयोग करने के लिए अनुक्रमणिका।InnoDB
FULLTEXT
. का समर्थन करता है सूचकांक भी। मुझे लगता है कि यह प्रदर्शन के लिहाज से बेहतर विकल्प हो सकता है। बूलियन मोड में फ़ुलटेक्स्ट पर और दस्तावेज़ीकरण में पाया जा सकता है। मैनुअल
।