2012-04-04 19 views
5

मेरे पास एक तालिका उपयोगकर्ता है जिसमें फ़ील्ड (आईडी, first_name, middle_name, last_name) है।किसी तालिका के एकाधिक फ़ील्ड में एक स्ट्रिंग खोजें

मैं अपने नाम से उपयोगकर्ता को खोजने के लिए एक प्रश्न लिखना चाहता हूं। नाम पहला नाम, मध्य नाम या अंतिम नाम हो सकता है।

$sql = "SELECT * FROM user 
     WHERE first_name like '%$name%' OR 
       middle_name like '%$name%' OR 
       last_name like '%$name%'"; 

क्या यह कुशल क्वेरी है? (समय के लिए सुरक्षा समस्या छोड़ दें।)

+1

क्या इसकी तुलना में यह कुशल है? – Jon

+0

इस टिप्पणी के अनुसार http://stackoverflow.com/questions/9986678/searching-more-than-1-column/9986696#comment12762483_9986696 यूनियन तेज है –

+0

@ जोन मैं उस कार्य को करने के लिए बेहतर क्वेरी प्राप्त करना चाहता हूं। मैं कुछ भी तुलना नहीं कर रहा हूँ। –

उत्तर

3

ऑल्टर मेज और First_name,second_name,last_name पर समग्र फुलटेक्स्ट सूचकांक जोड़ने तो इस क्वेरी

select * 
from table_name 
where match (`First_name`,`second_name`,`last_name`) against('name') 

यह बहुत बहुत तेजी से आपकी क्वेरी तो है का उपयोग करें।

1

जैसे ही आपके पास WHERE क्लॉज में LIKE '%something%' है, तो आप एक टेबल स्कैन को मजबूर करते हैं। तो हाँ, यह अक्षम है, लेकिन एक या तीन LIKE कथन थोड़ा अंतर करेंगे।

तालिका स्कैन बड़ा प्रदर्शन हिट है।

MySQL की Full Text Search क्षमता को देखने पर विचार करें। यह इस प्रकार की क्वेरी को अधिक कुशलतापूर्वक उत्तर देने के लिए डिज़ाइन किया गया है।

0

आप एक से अधिक क्षेत्रों में पैटर्न को खोजने की जरूरत है, और यदि आप तालिका स्कीमा परिवर्तित करने की अनुमति, मैं FULL-TEXT SEARCH को लागू करने का सुझाव देते हैं।

आशा है कि यह मदद करता है :)

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