2012-06-19 10 views
13

मैंने हमेशा सोचा था कि आप ORLIKE में MySQL में क्वेरी पूछने के लिए उपयोग कर सकते हैं। तो, अगर मैं 1 कीवर्ड या अवधि के लिए लगातार एक से अधिक क्षेत्रों की तुलना करना चाहते थे:एकाधिक क्षेत्रों की तुलना करने के लिए MySQL में क्वेरी का उपयोग करना या

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

तुलना करने के लिए अगर मैं था शब्द की एक सरणी और:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%'; 

मुझे लगता है कि वाक्य रचना पर विश्वास नहीं करते हालांकि, सही है। क्या इस तरह से कुछ लिखने की एक कुशल विधि है:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'; 

क्या मैं इस बारे में सही तरीके से जा रहा हूं?

+0

मैं बस आपके "शब्दों की सरणी" एल्गोरिदम के बारे में सोच रहा हूं ... क्या आप वाकई परिणाम प्राप्त करना चाहते हैं यदि कोई कॉलम किसी शब्द की तरह है और यदि कोई कॉलम दूसरे जैसा है? यह मेरे लिए बहुत अक्षम है – Sebas

+0

आप प्रक्रियाओं का भी उपयोग कर सकते हैं। – vijay

+0

कीवर्ड (ओं) एक खोज क्षेत्र से आ रहे हैं, इसलिए उपयोगकर्ता कई फ़ील्ड के आधार पर डेटाबेस खोजना चाहेंगे। यदि वे अपने खोज शब्द में 2 शब्द का उपयोग करते हैं, तो यह अभी भी इस शब्द के लिए दोनों कॉलम खोजना समझ में आता है। मैं एक क्षेत्र को बाहर नहीं करना चाहता क्योंकि संभावना है कि उनमें कई संबंधित शब्द हैं। – RCNeil

उत्तर

21

उपयोग इस ::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
+0

आह। मैं इसे लेता हूँ कोष्ठक आवश्यक हैं? इससे समझाया जाएगा कि यह पहले क्यों काम नहीं कर रहा था .... – RCNeil

+1

हां .. की प्राथमिकता और उससे अधिक है या इसलिए ब्रेसिज़ आवश्यक हैं ... –

+0

कमाल। आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! – RCNeil

17

वाक्य रचना आप इच्छा कर रहे हैं के सबसे करीब है:

SELECT * FROM MyTable 
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%') 
AND (CONCAT(Column1, Column2) LIKE '%keyword2%') 

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

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! – RCNeil

+1

यदि आप एक साथ दो वर्ण कॉलम जोड़ते हैं, तो उन्हें संख्याओं के रूप में डाला जाएगा और जोड़ा जाएगा। सबसे अधिक संभावना है, परिणाम शून्य होगा, और आपका WHERE खंड कभी भी सत्य का मूल्यांकन नहीं करेगा। MySQL में कॉलम को संयोजित करने के लिए, CONCAT का उपयोग करें। –

+0

इसके लिए धन्यवाद, मैंने CONCAT() ... – Mazrick