2013-05-25 9 views
5

मैच के लिए मैं निम्न मान से युक्त एक मेज है:MySql regexp दो अल्पविराम से अलग तार

id | value  | 
----------------------- 
1  | 1,2,5,8,12,20 |  
2  | 11,25,26,28 |  
----------------------- 

अब मैं कुछ अल्पविराम आईडी जैसे अलग खोज करना चाहते हैं उपरोक्त मूल्य कॉलम से '1,3,6,7,11' उदा।

SELECT id FROM tbl_name 
WHERE value REGEXP '*some reg exp goes here containing 1,3,6,7,11*' 
LIMIT 1,0; 

SELECT id FROM tbl_name 
WHERE value REGEXP '*some reg exp goes here containing 3,6,27,15*' 
LIMIT 1,0; 
1 क्वेरी ऊपर

1 लौटना चाहिए, जबकि 2 लौटना चाहिए शून्य

मैं नियमित अभिव्यक्ति किसी को भी मदद कर सकते हैं के साथ नया हूँ। धन्यवाद

+0

बस सुनिश्चित करें कि मैं समझता हूँ, यह 'लौटना चाहिए 1' क्योंकि संख्या के कम से कम एक है कि आईडी के साथ पंक्ति पर से मेल खाता बनाने के लिए? –

+0

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

+0

कोई भी उस पंक्ति का आईडी नहीं होना चाहिए, और हां यह वापस लौटाया गया है यदि कम से कम संख्या में मेल खाते हैं। – prashant

उत्तर

13
REGEXP '(^|,)(1|3|6|7|11)(,|$)' 

अनुक्रम 1,3,6,7,11 में से एक संख्या वाले सभी मूल्यों से मेल खाएगी।

आपको कई मानों को बचाने के लिए एक कॉलम का उपयोग नहीं करना चाहिए। सामान्य डेटा!

संपादित जवाब

+0

धन्यवाद @ मिशेल, लेकिन मैं मिलान करना चाहता हूं अगर आपूर्ति की गई स्ट्रिंग में से कोई भी संख्या (कम से कम एक) मान से मेल खाती है, जैसा कि मेरे प्रश्न 1 में पहली स्ट्रिंग और मान में मेल खाता है। – prashant

+0

अद्यतन उत्तर। यह मान क्या खड़े हैं? इस क्वेरी में बढ़ती मान लंबाई और तालिका आकार के साथ अधिक समय लगेगा। अगर आप –

+0

+1 चाहते हैं तो मैं सामान्यीकरण को काम करने में आपकी मदद कर सकता हूं वास्तव में मुझे यह समाधान मेरी तुलना में बेहतर पसंद है :) –

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