Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में ORDER BY RELEVANCE कैसे करें?

CASE WHEN के साथ कस्टम प्रासंगिकता क्रम

MySQL में खोज परिणामों को **प्रासंगिकता (relevance)** के अनुसार क्रमबद्ध करने के लिए CASE WHEN अभिव्यक्ति का उपयोग करके कस्टम प्राथमिकता परिभाषित करें।

उदाहरण परिदृश्य

उपयोगकर्ता नाम में 'Carol' खोजें, प्राथमिकता क्रम में:

  1. नाम 'Carol' से **शुरू** होता है (सबसे प्रासंगिक)
  2. नाम में ' Carol ' **बीच में** है (मध्यम)
  3. नाम 'Carol' पर **खत्म** होता है (कम)
  4. अन्य

व्यावहारिक उदाहरण

1. टेबल बनाएं और डेटा डालें

mysql> CREATE TABLE OrderByRelevance (
    -> UserId INT,
    -> UserName VARCHAR(200)
    -> );
Query OK, 0 rows affected (0.51 sec)

mysql> INSERT INTO OrderByRelevance VALUES
    -> (101, 'Carol Smith'),
    -> (102, 'Carol Adams'),
    -> (103, 'Carolnathan Todd'),
    -> (104, 'John Smith'),
    -> (105, 'Sam Carol Bond');

2. डेटा देखें

mysql> SELECT * FROM OrderByRelevance;
+--------+------------------+
| UserId | UserName         |
+--------+------------------+
| 101    | Carol Smith      |
| 102    | Carol Adams      |
| 103    | Carolnathan Todd |
| 104    | John Smith       |
| 105    | Sam Carol Bond   |
+--------+------------------+
5 rows in set (0.00 sec)

3. प्रासंगिकता के अनुसार क्रमबद्ध करें

mysql> SELECT MAX(UserId) AS Id, UserName 
    -> FROM OrderByRelevance 
    -> WHERE UserName LIKE '%Carol%' 
    -> GROUP BY UserName 
    -> ORDER BY 
    ->   CASE 
    ->     WHEN UserName LIKE 'Carol%' THEN 0 
    ->     WHEN UserName LIKE '% Carol %' THEN 1 
    ->     WHEN UserName LIKE '%Carol' THEN 2 
    ->     ELSE 3 
    ->   END,
    ->   UserName;
+------+------------------+
| Id   | UserName         |
+------+------------------+
| 102  | Carol Adams      |
| 101  | Carol Smith      |
| 103  | Carolnathan Todd |
| 105  | Sam Carol Bond   |
+------+------------------+
4 rows in set (0.00 sec)

व्याख्या

  • Carol% - 'Carol' से शुरू (प्राथमिकता 0)
  • % Carol % - बीच में स्पेस के साथ ' Carol ' (प्राथमिकता 1)
  • %Carol - 'Carol' पर खत्म (प्राथमिकता 2)
  • ELSE 3 - अन्य (प्राथमिकता 3)
  • द्वितीयक क्रम: UserName (वर्णानुक्रम)

उन्नत: फुल-टेक्स्ट खोज प्रासंगिकता (MySQL 5.6+)

बड़े टेक्स्ट खोज के लिए MATCH() AGAINST() उपयोग करें:

SELECT *, MATCH(title, body) AGAINST('search term' IN NATURAL LANGUAGE MODE) AS relevance
FROM articles
WHERE MATCH(title, body) AGAINST('search term' IN NATURAL LANGUAGE MODE)
ORDER BY relevance DESC;

सर्वोत्तम अभ्यास

  • सरल केस के लिए CASE WHEN ठीक है
  • बड़े डेटा/जटिल खोज के लिए फुल-टेक्स्ट इंडेक्स + MATCH AGAINST
  • ElasticSearch/Solr जैसे समर्पित खोज इंजन पर विचार करें
  1. - MySQL में ORDER BY FIELD() से एकाधिक ID के अनुसार क्रमबद्ध करें

    FIELD() फंक्शन के साथ कस्टम क्रम में सॉर्टिंग जब आपको किसी कॉलम के मानों को एक विशिष्ट, गैर-मानक क्रम में व्यवस्थित करना हो, तो ORDER BY FIELD(column, value1, value2, ...) का उपयोग करें। टेबल और डेटा CREATE TABLE DemoTable( ClientId VARCHAR(40), ClientName VARCHAR(40) ); Query OK, 0 rows a

  1. - MySQL में ORDER BY CASE और IN() का उपयोग करके ग्रुप्ड फील्ड्स को कैसे ऑर्डर करें

    CASE WHEN ... IN() के साथ कस्टम ऑर्डरिंग ग्रुप्ड फील्ड्स को कस्टम ऑर्डर में सॉर्ट करने के लिए ORDER BY CASE के साथ IN() का उपयोग करें। CASE विभिन्न शर्तों का मूल्यांकन करता है जबकि ORDER BY मानों को आरोही/अवरोही क्रम में सॉर्ट करता है। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable (

  1. - MySQL में शर्त के साथ ORDER BY और SELECT कैसे करें?

    कंडीशनल ORDER BY: जीरो वैल्यू अंत में किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें। सिंटैक्स SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName; टेबल बनाना और डेटा इन्सर्ट करना CREATE TABL