MySQL
दृश्यों को अनुक्रमित नहीं कर सकता, इसलिए आप जो चाहते हैं वह MySQL
. में असंभव है ।
आप स्फिंक्स जैसे बाहरी पूर्ण टेक्स्ट इंडेक्सिंग इंजन का उपयोग कर सकते हैं और JOINS
के साथ क्वेरी का उपयोग करके वहां डेटा लोड कर सकते हैं।
वैकल्पिक रूप से, आप एक असामान्य तालिका बना सकते हैं:
CREATE TABLE ftsearch
(
teacherId INT PRIMARY KEY,
teacherBiography TEXT,
subject1 TEXT,
subject2 TEXT,
subject3 TEXT,
)
ENGINE=MyISAM
और इसे इस क्वेरी से भरें:
INSERT
INTO ftsearch
SELECT teacherId, teacherBiography,
s1.name, s2.name, s3.name
FROM teacherProfile
LEFT JOIN
subject s1
ON s1.id = subjectOneId
LEFT JOIN
subject s2
ON s2.id = subjectTwoId
LEFT JOIN
subject s3
ON s3.id = subjectThreeId
समय पर।
दरअसल, अगर आपकी सभी टेबल MyISAM
हैं , आप एक पूर्ण पाठ अनुक्रमणिका बनाए बिना, शामिल होने के लिए पूर्ण पाठ खोज क्वेरी (बूलियन मोड में) लागू कर सकते हैं।
मान लें, यदि आप '+Jones +math +physics'
. की खोज कर रहे हैं , जहां Jones
एक शिक्षक का उपनाम है और math
और physics
विषय हैं, आप यह प्रश्न कर सकते हैं:
SELECT teacherId, teacherBiography,
s1.name, s2.name, s3.name
FROM teacherProfile
LEFT JOIN
subject s1
ON s1.id = subjectOneId
LEFT JOIN
subject s2
ON s2.id = subjectTwoId
LEFT JOIN
subject s3
ON s3.id = subjectThreeId
WHERE MATCH(teacherBiography) AGAINST ('+Jones' IN BOOLEAN MODE)
AND MATCH(t.teacherBiography, s1.name, s2.name, s3.name) AGAINST ('+Jones +math +physics' IN BOOLEAN MODE)
MATCH(teacherBiography) AGAINST ('+Jones')
एक FULLTEXT
. का उपयोग करेगा teacher
. पर अनुक्रमणिका , यदि कोई; दूसरा MATCH
परिणामों को ठीक-ठीक फ़िल्टर कर देगा।
OR
. से जुड़ी क्वेरी हालाँकि, परिस्थितियाँ या प्रासंगिकता छँटाई अधिक जटिल है।