Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में एकाधिक फ़ील्ड पर भारित खोज करने का सबसे अच्छा तरीका?

संभवतः भारित खोज / परिणाम करने का यह तरीका आपके लिए उपयुक्त है:

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 जैसी किसी चीज़ का उपयोग करने पर विचार कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रतिक्रिया सामग्री एक स्ट्रिंग या ऑब्जेक्ट होना चाहिए जो __toString (), बूलियन को लागू करने के बाद psql . पर ले जाए

  2. यदि मौजूद नहीं है तो MySql में डालें

  3. सबडेट () उदाहरण – MySQL

  4. दिनांक के अनुसार क्रमबद्ध करने के लिए SQL का उपयोग करना संभव है, लेकिन परिणाम सेट के पीछे अशक्त तिथियां डालें?

  5. PHP - जबकि/अन्य त्रुटि?