2011-12-07 16 views
9

तो मेरे पास एक mysql क्वेरी है जो प्रत्येक संपर्क "संपर्क" से पूछताछ करता है, फिर खरीदारी करता है। खरीद संबंधित तालिका में हैं। मैं खरीद की संख्या वे इस तरह सही करने के लिए बना दिया है के साथ एक संपर्क नाम प्रदर्शित करना चाहते हैं:MYSQL गिनती संबंधित रिकॉर्ड एक प्रश्न

Adam(1) 
Mike(8) 
Steve(3) 

मेरे वर्तमान एसक्यूएल इस तरह दिखता है:

SELECT * FROM contacts ORDER BY contacts.name ASC" 

और मेरे वर्तमान तालिका इस प्रकार है:

Adam 
Mike 
Steve 

आदेश वर्तमान तालिका मुझे पता है मैं "खरीद" तालिका कुछ कैसे शामिल होने और उसके बाद ग्रुप द्वारा इस्तेमाल करते हैं और गिनती करने के लिए है में संबंधित (खरीद) की गिनती तालिका खींचने के लिए में() मज़ा उद्धरण लेकिन मुझे यकीन नहीं है कि इस एसक्यूएल कथन का निर्माण कैसे करें। क्या कोई मेरी मदत कर सकता है।

Adam(1) 
Mike(8) 
Steve(3) 

आप किसी भी मदद के लिए बहुत बहुत धन्यवाद:

फिर सब मुझे क्या करना कोशिश कर रहा हूँ एक मेज (संपर्क) सूची और गिनती यह संबंधित है रिकॉर्ड (खरीद) और यह इस तरह दिखना है।

उत्तर

21

purchases तालिका मान लिया जाये कि contacts तालिका contact_id कहा जाता है, इस तरह एक प्रश्न कुछ काम करना चाहिए के लिए एक विदेशी कुंजी है। यदि आपको नाम के बाद कोष्ठक के साथ इंगित करने के तरीके को प्रारूपित करना होगा, तो आप MySQL के concat() फ़ंक्शन का उपयोग कर सकते हैं। कुछ इस तरह:

SELECT concat(c.name, '(', count(p.contact_id), ')') AS Name_And_Count_Together 
FROM contacts AS c 
LEFT OUTER JOIN purchases AS p 
ON p.contact_id = c.contact_id 
GROUP BY c.contact_id 
ORDER BY c.name ASC 
+1

आपको बहुत धन्यवाद, यह एक आकर्षण की तरह काम करता था। खुशी है कि मैंने यहां बीसी पोस्ट किया है, मैंने कभी अपने बारे में कभी नहीं सोचा होगा। फिर से धन्यवाद। – user982853

+0

पहली खरीद की अंतिम खरीद की तारीख जोड़ने के लिए संभव है? – ipel

+1

@ipel Sure। आप चयन सूची में अधिकतम (p.purchase_date) जैसे कुछ जोड़ सकते हैं। – Asaph

0

आवश्यक क्वेरी (मैं अपने स्कीमा पता नहीं है) कुछ इस तरह होगा:

SELECT c.name, count(p.id) FROM contacts c 
JOIN purchases p ON (c.id = p.id) 
GROUP BY p.id 
ORDER BY contacts.name ASC 
+2

एक बाहरी में शामिल होने की सलाह दी जाती हो, ताकि आप शून्य खरीद के साथ संपर्क भी शामिल कर सकते हैं होगा। – Asaph

+1

हाँ, आप सही हैं –

1
SELECT contacts.name, COUNT(*) 
    FROM contacts, purchases 
    WHERE contacts.name = purchases.name 
GROUP BY purchases.key 
ORDER BY contacts.name 

कुंजी आप रिकॉर्ड की पहचान करने के साथ प्रयोग कर रहे हैं कहां खंड में .name बदलें।

SELECT c.name, count(p.contact_id) 
FROM contacts AS c 
LEFT OUTER JOIN purchases AS p 
ON p.contact_id = c.contact_id 
GROUP BY c.contact_id 
ORDER BY c.name ASC 

इस क्वेरी एक अलग कॉलम है, जो मेरा सुझाव में गिनती डाल देंगे:

+1

एक बाहरी जुड़ाव सलाह दी जाएगी ताकि आप शून्य खरीद के साथ संपर्क भी शामिल कर सकें। – Asaph

+1

आह, अच्छा बिंदु आपको धन्यवाद – kz3

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