कई मूल्यों की तरह MySQL


144

मेरे पास यह MySQL क्वेरी है।

मेरे पास इस सामग्री के साथ डेटाबेस फ़ील्ड हैं

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

यह क्वेरी की तरह काम क्यों नहीं करता है? मुझे खेल या पब या दोनों के साथ खेतों की आवश्यकता है?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')

जवाबों:


133

(a,b,c)इस सूची में केवल के साथ काम करता in। इसके लिए like, आपको उपयोग करना होगा or:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

3
यह कई में फायदेमंद नहीं होगा (मान लें कि 5 या अधिक गतिशील खोज योग्य क्वेरी), इस प्रकार, regexp का उपयोग करना बेहतर होगा।
शायन अहमद

315

ऐसा करने का तेज़ तरीका:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

क्या यह:

WHERE interests REGEXP 'sports|pub'

यह समाधान यहां देखें: http://forums.mysql.com/read.php?10,392332,392950#msg-392950

REGEXP के बारे में यहाँ और अधिक: http://www.tutorialspoint.com/mysql/mysql-regexps.htm


यदि आप एक अज्ञात राशि में एक स्ट्रिंग (a। b। c। c ...) के रूप में गुजर रहे हैं, तो regexp एकमात्र तरीका है यदि आप LIKE करना चाहते हैं, तो क्या यह है?
लगातार

1
क्या आप जानते हैं कि क्या यह एक उपश्रेणी के साथ किया जा सकता है? मान लीजिए कि मेरे पास उन शब्दों का एक कॉलम है, जिनकी मुझे खोज करने की आवश्यकता है, मैं एक उपश्रेणी के साथ 'स्पोर्ट्स | पब' को कैसे बदल सकता हूं?
AdamMc331

अरे, क्या आप मुझे% LIKE% के बजाय LIKE% के लिए REGEXP बता सकते हैं, मैं सटीक तार लाने की कोशिश कर रहा हूँ ...
दीपांशु गोयल

3
यह समाधान पानी से पहले एक को बाहर निकालता है
डोनटो

2
एक कॉलम से regexp मान प्राप्त करने के लिए:(select group_concat(myColumn separator '|') from..)
daVe

34

आप REGEXP की कोशिश क्यों नहीं करते। इसे इस तरह आज़माएं:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'

5
हाँ !! मैं इसके विपरीत तरीका चाहता हूं। तो यह SELECT * FROM table WHERE interests NOT REGEXP 'sports|pub' (> ‿◠) is
Pathros

3
यह उत्तर आपके द्वारा jazkatप्रस्तुत 5 साल के उत्तर से अलग कैसे है ?
वैदस

@ वैद्य - धन्यवाद - अपने आप से एक ही सवाल पूछ रहा था ...: D
theFriedC

18

आप भी उपयोग कर सकते हैं RLIKE

उदाहरण के लिए:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'

6
बस सभी के लिए ध्यान दें कि RLIKE और REGEXP पर्यायवाची हैं
Intacto

8

आपकी क्वेरी होनी चाहिए SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0

जो मैं समझता हूं कि आप अपनी तालिका के एक क्षेत्र में हितों को संग्रहीत करते हैं, जो एक गलत धारणा है। आपको निश्चित रूप से "रुचि" तालिका होनी चाहिए।


2
मुझे लगता है कि यह होना चाहिए SELECT * FROM table WHERE find_in_set(interests, 'sports,pub'), लेकिन यह तकनीक ज्यादातर स्थितियों में regex को बेहतर बनाने की संभावना है।
क्रिस स्ट्राइकलैंड

7

यदि आप ANDपैरामीटर के बाद इस फ़ंक्शन का उपयोग करते हैं तो कोष्ठक का उपयोग करना न भूलें

ऐशे ही:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')

3

या अगर आपको केवल शब्दों की शुरुआत से मेल खाना चाहिए:

WHERE interests LIKE 'sports%' OR interests LIKE 'pub%'

आप regexp caret मैचों का उपयोग कर सकते हैं:

WHERE interests REGEXP '^sports|^pub'

https://www.regular-expressions.info/anchors.html



1

अधिक काम के उदाहरण:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'DELL'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

यदि किसी कंपनी के कई डोमेन के बराबर ईमेल एक्सटेंशन होते हैं, तो टास्क को एक इवेंट में प्रतिभागियों को फिल्टर के साथ गिना जाता था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.