2011-08-11 13 views
14

मेरे पास दो कॉलम first_name और last_name के साथ एक ग्राहक तालिका है।दो कॉलम पर विचार करने के लिए कैसे करें?

मैं एक प्रश्न में दोनों कॉलम से डेटा प्राप्त करने में सक्षम होने के लिए LIKE का उपयोग कैसे कर सकता हूं?

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

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%' 

मैं इस की कोशिश की है और यह मेरे full_name स्तंभ मौजूद नहीं है बताता है।

+0

[पूर्ण पाठ खोज] (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html) सबसे अधिक है एसक्यूएल में कुशल साधन है जो आप चाहते हैं। –

+0

@OMG चूंकि मैं तालिका और डेटा सम्मिलन को बदल सकता हूं, मैंने एक नया अनुक्रमित कॉलम पूर्ण_नाम बनाया और उत्तर में उल्लिखित प्रदर्शन समस्याओं के कारण इसका उपयोग किया। – RedDragon

उत्तर

31
SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 
+1

आप कॉलम में संभावित अतिरिक्त रिक्त स्थान के लिए पहले_नाम और last_name को भी ट्रिम करना चाहते हैं। – Narnian

+1

यदि आप उपयोगकर्ता भी इनपुट कर सकते हैं तो आप "अंतिम नाम, प्रथम नाम" संस्करण भी देख सकते हैं। – Narnian

+0

तो सरल, शानदार। डंक :) – arjunaaji

5

आपने लगभग

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

नोट कर रहे हैं: यह बहुत अच्छा प्रदर्शन नहीं हो सकता है। आप full text search पर विचार करना चाहेंगे।

0

मेरे पास MySQL नहीं है, लेकिन क्या आप नीचे दिए गए कोड की तरह कुछ नहीं कर सकते?

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

अस्वीकरण: यह बहुत धीमा हो सकता है !!!

4

उपयोग WHERE के बजाय HAVING:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
    FROM customer HAVING full_name LIKE 'John D%' 
+1

क्यों कहां है? –

0
SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

बहुत धीमी गति से हो सकता है लेकिन यह है कि कोई फर्क नहीं देगा, यदि आपका डेटाबेस काफी छोटा है। CONCAT का उपयोग करते समय सुनिश्चित करें कि कॉलम नाम दोनों के लिए संयोजन समान है या नहीं, यह आपको एक त्रुटि लाएगा।

नीचे एक कथन है जब मैं अपने LIKE कथन दोनों श्रेणी नाम और पाठ्यक्रम नाम के लिए काम करने के लिए चाहता हूं। मैं दोनों टेबलों में cat_id की जांच करता हूं ताकि मुझे पता चल सके कि कौन सा कोर्स किस श्रेणी से संबंधित है।

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name) 
LIKE :name ORDER BY b.cat_id 

: नाम प्लेसहोल्डर है (PDO)

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