2010-09-08 11 views
33

मेरे पास दो टेबल, कीवर्ड और डेटा हैं।एक ही कॉलम मान के साथ mysql पंक्तियों को एक पंक्ति में कैसे समूहित करें?

तालिका कीवर्ड में 2 कॉलम (आईडी, कीवर्ड) हैं, तालिका डेटा में 3 कॉलम हैं (आईडी [keyword.id की विदेशी कुंजी], नाम, मान)।

मैं इस क्वेरी का उपयोग कर रहा हूँ:

SELECT k.id, d.value, d.name 
FROM keywords AS k 
INNER JOIN data as d ON k.id = d.id 

यह की तरह कुछ देता है: (भविष्य में शायद अधिक)

1 123 name1 
1 456 name2 
2 943 name1 
3 542 name1 
3 532 name2 
3 682 name3 

प्रत्येक id 3 0 से मान हो सकते हैं।

मैं उसी पंक्ति में एक ही आईडी के साथ सभी पंक्तियों को कैसे पुनर्प्राप्त कर सकता हूं?

तरह
1 123 456 
2 943 
3 542 532 682 

मैं यह करने के क्योंकि मैं मान सॉर्ट करने के लिए सक्षम होना चाहते हैं चाहते हैं।

+2

यह इस तरह का परिवर्तन है कि यह MySQL से पूछने के बजाय एप्लिकेशन-साइड करना वास्तव में बेहतर होगा। – Amber

+0

मैं एम्बर से सहमत हूं, यद्यपि आप अभी भी केवल एसक्यूएल के साथ करना चाहते हैं, हम्म .. मैं "कॉन्सट" और "ग्रुप बाय" एसक्यूएल फ़ंक्शंस के लिए Google का विवरण दूंगा। –

+0

मैं ऐसा करना चाहता हूं क्योंकि मैं मानों को क्रमबद्ध करने में सक्षम होना चाहता हूं, इसलिए यह बहुत अच्छा होगा अगर मैं इसे सीधे mysql से सॉर्ट कर सकूं। क्या आप जानते हैं कि मैं प्रत्येक कॉलम को php सरणी में संग्रहीत कैसे आसानी से सॉर्ट कर सकता हूं? – jarkam

उत्तर

59

उपयोग GROUP_CONCAT() इस तरह:

SELECT k.id, GROUP_CONCAT(d.value) 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 

इसके अलावा, आप ORDER BY d.name करने के लिए के रूप में आप चाहते हैं के सटीक मानों के आदेश प्राप्त करने की आवश्यकता हो सकती है। इस तरह:

SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 
+0

हां मैं ग्रुप द्वारा भूल गया ... – jarkam

+0

क्या आप 'GROUP BY k.id' भूल गए थे? – Amber

+0

@ जर्कम, क्योंकि आपने इस क्वेरी में 'GROUP BY k.id' का उपयोग नहीं किया है। – shamittomar

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