2012-03-20 19 views
18

मेरी तालिका में से एक में मैं अपना विज्ञापन डेटा संग्रहीत करता हूं, प्रति विज्ञापन एक पंक्ति है। मैं कुछ अन्य तिथियों को किसी अन्य तालिका में भी संग्रहीत करता हूं, लेकिन यह प्रति पंक्ति एक पंक्ति है क्योंकि मुझे नहीं पता कि एक विशिष्ट विज्ञापन कितनी तारीखें प्राप्त करता है। मैं डेटा चयन के रूप में एक ही क्वेरी में अल तिथियों (जहां आईडी adventisement = 1) का चयन करना चाहता हूं, अलग-अलग बिज एक कॉमा। केवल समस्या यह है कि मैं के रूप में कई पंक्तियों मिल के रूप में वहाँ तिथि नहीं है मैं केवल अल डेटा के साथ एक पंक्ति चाहते हैं ... ..एक परिणाम पंक्ति में एकाधिक पंक्तियों का चयन करें

Table 1 (Advertisements) 
ID_adv   data 1    data2 
1    name1    picture1 
2    name2    picture2 
3    name3    picture3 
4    name4    picture4 

Table 2 (Dates) 
ID ID_adv  date 
1  2  1-1-2012 
2  2  2-1-2012 
3  3  1-1-2012 
4  3  2-1-2012 
5  3  3-1-2012 
6  3  4-1-2012 

परिणाम क्वेरी (Select ID_adv, data1, data2, dates WHERE ID_adv = 3)

3,name3,picture3,"1-1-2012,2-1-2012,3-1-2012,4-1-2012" 

दिनांक स्तंभ एक स्ट्रिंग हो सकती है एक अल्पविराम से अलग तारीखों के साथ ...।

कोई विचार?

उत्तर

24

आपके इच्छित परिणाम प्राप्त करने के लिए GROUP_CONCAT() और GROUP BY उपयोग कर सकते हैं:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON t2.ID_adv = t1.ID_adv 
GROUP BY t1.ID_adv 

यह प्रत्येक विज्ञापन के लिए सभी तिथियों अल्पविराम के द्वारा concatenated देता है। जहां किसी विशेष विज्ञापन के लिए तालिका 2 में कोई तिथियां नहीं हैं, आपको तिथियों के कॉलम के लिए NULL मिल जाएगा।

एक विशेष विज्ञापन को लक्षित करने के लिए, बस WHERE खंड जोड़ें:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON t2.ID_adv = t1.ID_adv 
WHERE t1.ID_adv = 3 
GROUP BY t1.ID_adv 
+0

हाँ यह यह है के साथ एक स्तंभ में पंक्तियों की बारी कर सकते हैं! –

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