संभवतः भारित खोज / परिणाम करने का यह तरीका आपके लिए उपयुक्त है:
SELECT *,
IF(
`name` LIKE "searchterm%", 20,
IF(`name` LIKE "%searchterm%", 10, 0)
)
+ IF(`description` LIKE "%searchterm%", 5, 0)
+ IF(`url` LIKE "%searchterm%", 1, 0)
AS `weight`
FROM `myTable`
WHERE (
`name` LIKE "%searchterm%"
OR `description` LIKE "%searchterm%"
OR `url` LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20
यह परिणामों को ऑर्डर करने के लिए भार प्रदान करने के लिए एक चुनिंदा सबक्वायरी का उपयोग करता है। इस मामले में तीन फ़ील्ड खोजे गए, आप प्रति फ़ील्ड एक वज़न निर्दिष्ट कर सकते हैं। यह शायद यूनियनों की तुलना में कम खर्चीला है और शायद केवल सादे MySQL में तेज़ तरीकों में से एक है।
यदि आपके पास अधिक डेटा है और आपको तेजी से परिणाम चाहिए, तो आप Sphinx या Lucene जैसी किसी चीज़ का उपयोग करने पर विचार कर सकते हैं।