2011-06-29 10 views
29

मैं एक का चयन क्वेरी जहां मैं कई पैटर्न'की तरह ('% इस% 'या'% कि% ') और कुछ = किसी और' काम नहीं कर रहा

LIKE ('%this%' or '%that%') and something=else 

रिटर्न शून्य परिणाम के लिए तार खोज करने के लिए कोशिश कर रहा हूँ है

हालांकि

LIKE '%this%' and something=else 

रिटर्न परिणाम और

LIKE '%that%' and something=else 

रिटर्न परिणाम

क्या मेरे सभी परिणाम एक प्रश्न में प्राप्त करना संभव है? यदि एक स्ट्रिंग दोनों से मेल खाता है, तो यह इसे कैसे संभालेगा?

+0

यदि आपके पास उचित त्रुटि जांच है तो आपको पहली क्वेरी में वाक्यविन्यास त्रुटि की अधिसूचना मिल गई होगी। कम से कम आपके पास 'mysql_query (...) या मरना चाहिए (mysql_error()); ' –

+1

संबंधित धागे में ट्यूटोरियल के रूप में महान उत्तर: http://stackoverflow.com/a/4808757/2906290 –

उत्तर

57

यदि आप कर सकते हैं तो यह अच्छा होगा, लेकिन आप SQL में उस वाक्यविन्यास का उपयोग नहीं कर सकते हैं।

इस प्रयास करें:

(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else 

नोट कोष्ठक के उपयोग! आपको OR अभिव्यक्ति के आसपास उनकी आवश्यकता है।
ब्रैकेट के बिना, इसे A OR (B AND C) के रूप में पार्स किया जाएगा, जो आपको अपेक्षित नतीजे नहीं देगा।

+0

+1 बीट मुझे 57 सेकंड तक। विचार करने का एक और विकल्प पूर्ण पाठ खोज (एफटीएस) –

+2

धन्यवाद है! एक बार जब आप जानते थे कि यह गलती कितनी स्पष्ट है :) –

1

आप की कोशिश की है:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

+1

हालांकि यह काम करेगा (और ऑप्टिमाइज़ेशन के बाद सटीक एक ही योजना का कारण बन सकता है), गैर-वितरित रूप को आम तौर पर पसंद किया जाता है - कम से कम मानव उपभोग के लिए। –

4

की तरह कुछ का प्रयास करें? 2 अलग बयानों में बाहर LIKE खंड

...FROM <blah> 
    WHERE 
    (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
    AND something = else 
2

आप इसे विभाजित के खिलाफ कुछ है है:

(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else) 
3

तोड़, अर्थात्:

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%') and something=else 
19
Instead of using `LIKE` use `REGEXP`. 

For example: 

    REGEXP 'THIS|THAT' 

For example: 

    REGEXP 'THIS|THAT' 
mysql> SELECT 'pi' REGEXP 'pi|apa';      -> 1 
mysql> SELECT 'axe' REGEXP 'pi|apa';     -> 0 
mysql> SELECT 'apa' REGEXP 'pi|apa';     -> 1 
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';    -> 1 
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';     -> 1 
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';    -> 0 

Refer: 
http://dev.mysql.com/doc/refman/5.1/en/regexp.html 
+2

http://dev.mysql.com/doc/refman/5.1/en/regexp।एचटीएमएल – mcmillab

+0

वास्तव में कई LIKES का उपयोग करने से अधिक स्वच्छ और उद्देश्य। – ivanleoncz

+2

एक और पठनीय उदाहरण: 'Mytable से चयन आईडी जहां वर्णन REGEXP "कुत्तों | बिल्लियों" ' –

0

मैं जानता हूँ कि यह थोड़ा पुराने सवाल है, लेकिन अभी भी लोगों को इतनी बजाय आप FULLTEXT index का उपयोग करना चाहिए कुशल समाधान खोजने की कोशिश (यह MySQL 5.6.4 से उपलब्ध है)। ट्रिपल like जहां ब्लॉक ~ 2.5S ले लिया में से + 35mil रिकॉर्ड के साथ, लेकिन इन क्षेत्रों पर सूचकांक जोड़ने और BOOLEAN MODE उपयोग करने के बाद मेज पर

क्वेरी match ... against ... अंदर यह केवल 0.05s ले लिया।

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