2011-01-14 14 views
9

मेरे पास शब्दों की एक सूची है। आइए कहें कि वे 'ऐप्पल', 'ऑरेंज' और 'पियर' हैं। मैं इस तरह डेटाबेस में पंक्तियों:MySQL: कॉलम में शब्दों की सूची से शब्द शामिल है

------------------------------------------------ 
|author_id | content      | 
------------------------------------------------ 
| 54   | I ate an apple for breakfast. | 
| 63   | Going to the store.    | 
| 12   | Should I wear the orange shirt? | 
------------------------------------------------ 

मैं एक InnoDB तालिका कि 1 और 3 पंक्ति वापस आ जाएगी पर एक प्रश्न के लिए देख रहा हूँ content स्तंभ मेरी सूची में से एक या अधिक शब्द शामिल हैं। मुझे पता है कि मैं अपनी सूची में प्रत्येक शब्द के लिए टेबल से पूछताछ कर सकता हूं, और LIKE और% वाइल्डकार्ड वर्ण का उपयोग कर सकता हूं, लेकिन मुझे आश्चर्य है कि ऐसी चीज के लिए एक प्रश्न पूछने की विधि है या नहीं?

उत्तर

14

संपादित करें:

कुछ इस तरह:

SELECT FROM yourtable WHERE content LIKE '%apple%' OR content LIKE '%orange%' 

आप पाश अपने शब्दों कहां खंड स्थिति पैदा कर सकते हैं।

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

$words = array('apple', 'orange'); 
$whereClause = ''; 
foreach($words as $word) { 
    $whereClause .= ' content LIKE "%' . $word . '%" OR'; 
} 

// Remove last 'OR' 
$whereClause = substr($whereClause, 0, -2); 

$sql = 'SELECT FROM yourtable WHERE' . $whereClause; 

echo $sql; 

Output:

SELECT FROM yourtable WHERE content LIKE "%apple%" OR content LIKE "%orange%" 
+2

उह, मैं जाहिरा तौर पर देर हो चुकी थी और तुम्हारा अधिक पूरा हो गया है, इसलिए मुझे लगता है कि जब आप कोई +1 मिलेगा। – cbrandolino

+0

यही वह है जो मैं अब कर रहा हूं, और मैं इससे बचने की उम्मीद कर रहा था। हालांकि यह अलग-अलग प्रश्नों के नेटवर्क ओवरहेड से बचता है, मैं मानता हूं कि MySQL आंतरिक रूप से तालिका में प्रत्येक पंक्ति पर प्रत्येक शब्द को चलाने के लिए आंतरिक रूप से चल रहा है, जो अनिवार्य रूप से कई प्रश्न हैं। मैं उम्मीद कर रहा था कि MySQL के पास इस प्रकार की क्वेरी के लिए एक अनुकूलित फ़ंक्शन था। – mellowsoon

+0

इससे मुझे भी मदद मिली, चीयर्स नेवीड, आप जादूगर! –

19

MySQL (मेरा मानना ​​है कि 5.0 संस्करण) अपने एसक्यूएल में रेगुलर एक्सप्रेशन का उपयोग करने की क्षमता जोड़ा गया।

की जाँच करें: http://www.brainbell.com/tutorials/MySQL/Using_MySQL_Regular_Expressions.htm

SELECT author_id, content 
FROM AuthorTableName 
WHERE content REGEXP 'Apple|Orange|Pear' 
ORDER BY author_id; 
+0

बहुत बहुत धन्यवाद। वास्तव में मुझे क्या चाहिए। –

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