2009-10-30 10 views
11

मैं की तरह कुछ चलाने के लिए करना चाहते हैं:क्या मैं "आईएन" MySQL कथन में वाइल्डकार्ड का उपयोग कर सकता हूं?

select * from table where field in ("%apple%", "%orange%") 

वहाँ एक रास्ता है? या कम से कम प्रत्येक कीवर्ड के लिए गतिशील रूप से क्वेरी बनाने से बेहतर तरीका है:

select * from table where field like "%apple%" or field like "%orange%" 

धन्यवाद।

उत्तर

13

:

select * from my_table where field rlike 'apple|orange'; 

इसके अलावा, के रूप में दूसरों का उल्लेख किया है, तो आप MySQL's full text search क्षमताओं इस्तेमाल कर सकते हैं (पर केवल यदि आप MyISAM इंजन का उपयोग कर रहे हैं)।

+0

हाँ, सबसे आसान दृष्टिकोण की तरह दिखता है। धन्यवाद। उम्मीद है कि यह प्रदर्शन को बहुत प्रभावित नहीं करता है। – serg

+1

@ serg555: मुझे नहीं लगता कि आपको रेगेक्स दृष्टिकोण से अच्छा प्रदर्शन मिलेगा क्योंकि कोई अनुक्रमणिका उपयोग नहीं की जाएगी। मैं पूर्ण पाठ खोज दृष्टिकोण की सिफारिश करता हूं। – Asaph

+0

हाँ, लेकिन इसके इसके नुकसान भी हैं: केवल मायिसम टेबल, केवल एक अंत वाइल्डकार्ड। – serg

1

आपको शायद MySQL's full text indexing पर देखना चाहिए, यदि आप यही करने की कोशिश कर रहे हैं।

1

शायद boolean search against a fulltext index का उपयोग करने के लिए एक बेहतर समाधान होगा?

संपादित करें: मैं इसे ऊपर देखा और यह केवल अंत शब्दों का में वाइल्डकार्ड का समर्थन करता है: मुझे यकीन है कि यह किसी भी क्या आप के साथ आया था, लेकिन आप MySQL's regex capabilities इस्तेमाल कर सकते हैं की तुलना में बेहतर है नहीं कर रहा हूँ

ALTER TABLE table ADD FULLTEXT INDEX (field); 

SELECT * FROM table WHERE MATCH (field) 
AGAINST ('orange* apple*' IN BOOLEAN MODE); 
0

ओरेकल में, आप कर सकते हैं:

select * from table where 
regexp_like (column, 'apple|orange', 'i') 

आप और अधिक जटिल regexp उपयोग कर सकते हैं। 'मैं' इसे असंवेदनशील बनाता है। Oracle docs

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