दिलचस्प पोस्ट
SSL त्रुटि रूबीगाम्स इंस्टॉल करते समय, 'https://rubygems.org/ से डेटा खींचने में असमर्थ चयनित सूची बॉक्स आइटम के लिए पृष्ठभूमि का रंग बदलें मॉड्यूल स्तरीय रिटर्न स्टेटमेंट Node.js में क्यों काम करता है? क्या फॉन्ट-चेहरे की घोषणा में अभी भी एट, टीटीएफ और एसवीजी आवश्यक हैं? Firebase क्लाउड मेसेजिंग का उपयोग करने के लिए उपकरण को कैसे डिवाइस भेजना है? डायनेमिक कंट्रोल ग्रुप और चेकबॉक्स अनस्टिल्ड PHP के साथ MySQL के लिए सबसे अच्छा मिलान क्या है? ओरेकल एसक्यूएल: किसी अन्य तालिका से डेटा के साथ तालिका को अद्यतन करें टेक्स्ट बॉक्स में एन्टर की पर जावास्क्रिप्ट के साथ एक बटन ट्रिगर करें कैसे जावा में अपरिवर्तनीय वस्तुओं को बनाने के लिए? एसक्यूएल सर्वर केवल हाल ही के मूल्यों का उपयोग करके अलग-अलग पंक्तियों का चयन करता है क्या एजेएक्स एक रिमोट सर्वर से डेटा का अनुरोध कर सकता है? TypeScript परियोजनाओं में मौजूदा C # वर्ग परिभाषाओं का पुन: उपयोग कैसे करें निरपेक्ष पथ और सापेक्ष पथ JVM की डिफ़ॉल्ट एन्कोडिंग क्या है?

MySQL में "संपूर्ण शब्द मिलान" खोजें

मैं किसी एसक्यूएल क्वेरी को लिखना चाहूंगा जो एक टेक्स्ट फ़ील्ड में कीवर्ड के लिए खोज करता है, लेकिन केवल अगर यह "संपूर्ण शब्द मिलान" है (जैसे जब मैं "छुटाने" की खोज करता हूं, यह "शुष्क" से मेल नहीं होना चाहिए, लेकिन यह चाहिए मैच "एक छुटकारा"

मैं MySQL का उपयोग कर रहा हूँ

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

वेब के समाधान से एकत्रित समाधान "MySQL में "संपूर्ण शब्द मिलान" खोजें"

आप REGEXP और [[:<:]] और [[:>:]] शब्द-सीमा चिह्नकों का उपयोग कर सकते हैं:

 SELECT * FROM table WHERE keywords REGEXP '[[:<:]]rid[[:>:]]' 

क्लासिक शब्द सीमा को रोकने के लिए एक उत्तर मिला [[::<::]] विशेष वर्णों के साथ संघर्ष करना जैसे कि @ # $% ^ & *

बदलने के..

 SELECT * FROM table WHERE keywords REGEXP '[[:<:]]rid[[:>:]]' 

इसके साथ..

 SELECT * FROM table WHERE keywords REGEXP '([[:blank:][:punct:]]|^)rid([[:blank:][:punct:]]|$)' 

बाद के मैचों (अंतरिक्ष, टैब, आदि) || (कॉमा, ब्रैकेट इत्यादि) || लाइन के शुरू / अंत एक अधिक 'समाप्त' शब्द सीमा मैच

 select blah blah blah where column like 'rid %' or column like '% rid' or column like '% rid %' or column = 'rid' 
 select * from table where Locate('rid ', FieldToSearch) > 0 or Locate(' rid', FieldToSearch) > 0 

इससे छुटकारा मिलेगा, जहां से पहले या एक अंतरिक्ष के बाद से छुटकारा पाता है, आप खाते को लेने के लिए दृष्टिकोण का विस्तार कर सकते हैं।? और इतने पर, सुरुचिपूर्ण लेकिन आसान नहीं है

यह अब तक का सबसे अच्छा जवाब है।

 SELECT * FROM table WHERE keywords REGEXP '^rid[ $]' OR keywords REGEXP ' rid[ $]' 

मैं इसे सरल बना देता:

 SELECT * FROM table WHERE keywords REGEXP '[^ ]rid[ $]' 

लेकिन "रेखा-शुरुआत या स्थान" के बजाय "^ NOT a space" का विशेष अर्थ है [^]

REGEXP कई तरह की शर्तों की तुलना कैसे करता है? (इस ऐप में प्रदर्शन का महत्व नहीं है।)

शब्द सीमाओं के साथ regexp का उपयोग करें, लेकिन यदि आप भी असंवेदनशील खोज की तलाश चाहते हैं, तो कृपया ध्यान दें कि REGEXP एक एकल-बाइट ऑपरेटर है, इसलिए यह utf8_general_ci मिलान के लिए कुछ भी नहीं है, मैच असंवेदनशील नहीं होगा।

दोनों मुखर असंवेदनशील और पूर्ण शब्द मिलान करने के लिए, उसी तरह लिखे गए शब्द को निर्दिष्ट करें जो (नापसंद) PHP फ़ंक्शन sql_regcase () ने किया था।

असल में:

  • utf8_general_ci आपको एक समानता (WHERE फ़ील्ड = मान) केस और लहजे असंवेदनशील खोज करने की अनुमति देता है, लेकिन यह आपको एक पूरे शब्द मिलान (शब्द सीमाएं मार्करों को मान्यता नहीं देता) को निर्दिष्ट करने की अनुमति नहीं देता है

  • जैसे आप केस और उच्चारण असंवेदनशील खोज की अनुमति देते हैं लेकिन आपको मैन्युअल रूप से संभव शब्द सीमाओं के सभी संयोजनों को निर्दिष्ट करना होगा (शब्द सीमाएं मार्कर मान्यता प्राप्त नहीं हैं)

  • शब्द सीमाएं [[: <:]] और [[:::]] रीगएक्सपी में समर्थित हैं, जो एक बाइट फ़ंक्शन हैं, इसलिए उच्चारण असंवैधानिक खोज नहीं करते हैं

समाधान शब्द सीमाओं के साथ REGEXP का उपयोग करना है और sql_regcase करता है उस तरीके में संशोधित शब्द।

http://www.genovaperte.it पर प्रयुक्त