2010-03-25 12 views
25

मैं एक खोज सुविधा बनाने की कोशिश कर रहा हूं जो एक कीवर्ड आधारित मिलान खोजने के लिए एकाधिक कॉलम खोजेगा। इस क्वेरी:MySQL में एकाधिक कॉलम कैसे खोजें?

SELECT title FROM pages LIKE %$query%; 

केवल एक स्तंभ खोज के लिए काम करता है, मैं एक त्रुटि में अल्पविराम परिणामों के साथ स्तंभ नाम को अलग देखा। तो क्या mysql में एकाधिक कॉलम खोजना संभव है?

उत्तर

30

आप जो खोज लौटना चाहते पर निर्भर करता है, AND या OR ऑपरेटर का उपयोग कर सकते हैं।

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%; 

दोनों खंडों को लौटने के लिए रिकॉर्ड के लिए मिलान करना होगा। वैकल्पिक रूप से:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%; 

यदि कोई भी खंड मेल खाता है तो रिकॉर्ड वापस कर दिया जाएगा।

आप MySQL का चयन क्वेरी के साथ क्या कर सकते हैं, documentation कोशिश के बारे में अधिक जानकारी के लिए

+0

पैराम समान मूल्य क्या हैं? कहें, आप खोज रहे हैं कि 'स्टीवन' उपयोगकर्ता के पहले या अंतिम नाम में है या नहीं? (यह देखते हुए कि उपयोगकर्ता एक टेबल है, last_name और first_name कॉलम हैं।) – onebree

+1

@HunterStevens उस स्थिति में, [इस प्रश्न का यह अन्य उत्तर] देखें (http://stackoverflow.com/a/30365428/2908724)। – bishop

12

अपनी मेज MyISAM है:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content) 

, लेकिन सूचकांक के बिना भी काम करेगा:

SELECT * 
FROM pages 
WHERE MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE) 

यह बहुत तेजी से अगर आप अपने कॉलम पर एक FULLTEXT सूचकांक बनाने के लिए किया जाएगा।

+2

यह अच्छा है, लेकिन यह केवल सटीक मिलान पर काम करता है, कुत्तों के लिए एक खोज एक पृष्ठ का शीर्षक कुत्ता नहीं लौटेगा। – George

+1

नहीं, आप 'कुत्ते' और 'कुत्ते' से मेल खाने के लिए वाइल्डकार्ड 'कुत्ते *' का उपयोग कर सकते हैं। हालांकि आप 'adog' पाने के लिए '* कुत्ते' का उपयोग नहीं कर सकते हैं। केवल वन्यकार्ड तैयार करना समर्थित है। – DavidLin

33

यदि यह महज तो खोज आप CONCATENATE_WS उपयोग करने में सक्षम हो सकता है के लिए है। यह वाइल्ड कार्ड खोज की अनुमति देगा। तालिका के आकार के आधार पर प्रदर्शन समस्याएं हो सकती हैं।

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%' 
+1

हा! इस पर ठोकरें। साफ छोटी सी चाल। धन्यवाद! – raupach

+1

CONCAT-https: //www.percona.com/blog/2007/10/16/be-careful-when-joining-on-concat/ पर शामिल होने पर सावधान रहें – londox

-1
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%'); 

ऊपर क्वेरी के साथ प्रयास करें। 'FIRSTNAME LASTNAME': हम की तरह डेटा है जब

1

1)

select * 
from employee em 
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%'; 

2)

select * 
from employee em 
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%'; 

पहले उपयोगी है।

, उदा,

  • पार्थ पटेल
  • पार्थ पी
  • पटेल पार्थ

हम जैसे डेटा है जब दूसरा उपयोगी है: 'firstname-lastname'। इसमें आप विशेष पात्रों का भी उपयोग कर सकते हैं।

ई।जी

  • पार्थ-पटेल
  • parth_p
  • पटेल # पार्थ
संबंधित मुद्दे