2010-05-18 11 views
5

वर्तमान में, मैं एक खोज फ़ंक्शन कर रहा हूं। मेरी डेटाबेस में कहते हैं कि चलो, मैं इस डेटा है:MySQL में समानता से मिलान और क्रमबद्ध कैसे करें?

  • KEYWORD1
  • KEYWORD2
  • KEYWORD3
  • Keysomething
  • कुंजी

और उपयोगकर्ता द्वारा दर्ज किया: "कुंजी" के रूप में खोजने के लिए खोजशब्द।

  1. मैं कैसे (द्वारा क्रम) तरह से कर समानता:

    SELECT * FROM data WHERE (
        data_string LIKE '$key%' OR 
        data_string LIKE '%$key%' OR 
        data_string LIKE '%$key' 
    ) 
    

    असल में, मैं 2 प्रश्न हैं: यह मेरा वर्तमान क्वेरी है। उपर्युक्त उदाहरण से, मैं अपने पहले परिणाम के रूप में "कुंजी" चाहता था। मेरा वर्तमान परिणाम है: कीवर्ड 1, कीवर्ड 2, कीवर्ड 3, कीसमू और कुंजी

  2. मेरा SQL क्वेरी केवल "data_string" कॉलम द्वारा खोजा गया है, तो क्या होगा यदि मैं अन्य कॉलम को सीट करना चाहता हूं? मैं कुछ इस तरह करने की जरूरत है:

SELECT * FROM data WHERE (
    data_string LIKE '$key%' OR 
    data_string LIKE '%$key%' OR 
    data_string LIKE '%$key' 
) OR (
    data_other LIKE '$key%' OR 
    data_other LIKE '%$key%' OR 
    data_other LIKE '%$key' 
) -- ... 

वहाँ Q2 से किसी भी बेहतर/तेजी से क्वेरी है?

उत्तर

6

मुझे यकीन नहीं है कि LIKE ऐसा करने का सही तरीका है। यदि आपको कीवर्ड के लिए अपने टेक्स्ट के अंदर खोजना है और प्रासंगिकता स्कोर के परिणाम क्रमबद्ध करना है, तो आपको MySQL Full-Text index और MySQL Full-text Search functions का उपयोग करना चाहिए। क्षमा करें अगर यह आपको वास्तव में जो करने की कोशिश कर रहा है उससे दूर ले जाता है लेकिन मैं इसे देखने पर अनुशंसा करता हूं। MySQL संदर्भ मैनुअल से कुछ उद्धरण:

1) एक तालिका के एकाधिक स्तंभों

mysql> CREATE TABLE articles (
    -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    -> title VARCHAR(200), 
    -> body TEXT, 
    -> FULLTEXT (title,body) 
    ->); 

2) नमूना डेटा

mysql> INSERT INTO articles (title,body) VALUES 
    -> ('MySQL Tutorial','DBMS stands for DataBase ...'), 
    -> ('How To Use MySQL Well','After you went through a ...'), 
    -> ('Optimizing MySQL','In this tutorial we will show ...'), 
    -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), 
    -> ('MySQL vs. YourSQL','In the following database comparison ...'), 
    -> ('MySQL Security','When configured properly, MySQL ...'); 

3) नमूना पर पूरा टेक्स्ट सूचकांक बनाने के लिए कैसे क्वेरी जो कीवर्ड और प्रदर्शित करने के लिए एकाधिक कॉलम खोजती है + स्कोर:

mysql> SELECT id, body, MATCH (title,body) AGAINST 
    -> ('Security implications of running MySQL as root') AS score 
    -> FROM articles WHERE MATCH (title,body) AGAINST 
    -> ('Security implications of running MySQL as root'); 
+----+-------------------------------------+-----------------+ 
| id | body        | score   | 
+----+-------------------------------------+-----------------+ 
| 4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 | 
| 6 | When configured properly, MySQL ... | 1.3114095926285 | 
+----+-------------------------------------+-----------------+ 
संबंधित मुद्दे