2009-01-23 14 views
32

तरह MySql में ऑपरेटर उदाहरण के लिए, पंक्तियों को अपनी क्वेरी पाठ हो खोजने के लिए प्रयोग किया जाता है:MySQL: LIKE का एक रिवर्स संस्करण क्या है?

select name from user where name like "%john%" 

वापस आ जाएगी जो John Smith, Peter Johnson आदि

क्या होगा यदि मैं विपरीत की जरूरत है - लगता है पंक्तियों को हमारे प्रश्न पाठ में शामिल हैं? उदाहरण के लिए मैं इसे John Smith and Peter Johnson are best friends देता हूं और चाहता हूं कि यह मुझे तालिका से सभी नाम ढूंढें जो इस स्ट्रिंग में पाए जा सकें।

कि कैसे करना है?

+1

मैं भी इस सवाल से उलझन में हूं। मेरे सिर के ऊपर से, एक उचित पूर्ण पाठ खोज इंजन का उपयोग करने के बारे में क्या, उदा। स्फिंक्स या सोलर/लुसीन? –

+0

मुझे लगता है कि यहां क्या आवश्यक है उपयोगकर्ता से नाम का चयन करें जहां नाम (खोज स्ट्रिंग) "जॉन स्मिथ और पीटर जॉनसन सबसे अच्छे दोस्त हैं"। आउटपुट जोह स्मिथ, पीटर जॉनसन इत्यादि होना चाहिए, बशर्ते वे नाम में हों। असल में एक विपरीत पूर्ण पाठ खोज। – Dheer

उत्तर

43

यहाँ आप जो वर्णन एक तरह से आप प्राप्त कर सकते है

select * 
from users 
WHERE 'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%') 

क्योंकि अगर कोई मौका है कि name सकता है % या _ वर्ण (उदाहरण के लिए नाम = 'v% alue') है, तो उपरोक्त क्वेरी अभी भी उस रिकॉर्ड को गलत तरीके से वापस कर देगी। यह भी ध्यान रखें कि यदि आपके कॉलम में बैकस्लाश और/या "C escape characters" हो सकता है तो उन्हें बचने की भी आवश्यकता होगी। यह सब MySQL String Comparison Functions में समझाया गया है। उदाहरण के लिए एसक्यूएल नीचे 1 वापसी होगी:

SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%'); 

एकल बैकस्लैश \\\\ के साथ भाग जाने की आवश्यकता और % चरित्र भाग निकले गया था: \%

+1

धीर। ओह? ऐसा लगता है जोएल के लिए काम करता है। http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause – Zoredache

-2

यह एक टेक्स्ट अनुक्रमण समस्या है। अगर मुझे यह सही लगता है, तो आपका काम लोगों के सभी संदर्भों को एक मुक्त फॉर्म टेक्स्ट में ढूंढना है, और उनके पास कुछ भी नहीं है या पसंद नहीं है।

एक सामान्य रूप में, डेटाबेस तालिका जिसके विरुद्ध आप संदर्भों की तलाश में हैं, कुछ टेक्स्ट-इंडेक्सिंग एल्गोरिदम के लिए एक शब्दकोश के रूप में कार्य करता है। इस शब्दकोश का उपयोग करके इनपुट स्ट्रिंग पर एक इंडेक्स बनाएं और उम्मीद है कि आपको कुछ मैच मिलेंगे।

SELECT name FROM user 
WHERE 'John Smith and Peter Johnson are best friends' LIKE 
    CONCAT('%', name, '%') 
1
select name 
from users 
where instr('John Smith and Peter Johnson', name) > 0 

मैं नहीं बल्कि इस विधि के बजाय प्रयोग करेंगे:

संबंधित मुद्दे