2011-12-19 16 views
12

मैं किसी दिए गए आईडी के लिए एक अद्वितीय amount, operation, months, और fee डेटा के प्रत्येक समूह के लिए एक पंक्ति वापस करना चाहता हूं।समूह क्वेरी में सूची आईडी

enter image description here

मैं लगभग मैं क्या

SELECT amount, operation, months, fee, plan_id 
FROM promo_discounts 
WHERE promo_id = 1 
GROUP BY amount, operation, months, fee 

साथ चाहते हैं कौन सा मिल जाएगा प्राप्त कर सकते हैं:

enter image description here

लेकिन केवल यह नोटिस

टेबल इस प्रकार है एकदेता हैजब मैं इसे 1, 2, 3

जैसे कुछ वापस लौटना चाहता हूं तो यह संभव है?

उत्तर

25

आप का उपयोग GROUP_CONCAT

SELECT amount, operation, months, fee, 
    GROUP_CONCAT(DISTINCT plan_id SEPARATOR ',') AS plan_id 
FROM promo_discounts 
WHERE promo_id = 1 
GROUP BY amount, operation, months, fee 

हालांकि सावधान रहें, कि डिफ़ॉल्ट अधिकतम लंबाई 1024 है सकता है इसलिए यदि आप एक बड़ी मेज के साथ इस कार्य कर रहे हैं, तो आप छोटा कर दिया मान हो सकता है ..

+0

यह 'की [ब्लॉब एक ​​मूल्य के साथ plan_id'' लौटा रहा है वास्तव में प्राप्त करने के लिए परिणाम के साथ खेल सकते हैं - 5 बी ] ' –

+0

एनवीएम, http://bugs.mysql.com/bug.php?id=19473 को देखने के बाद इसे काम करने में सक्षम था –

5

group_concat() फ़ंक्शन पर एक नज़र डालें।

SELECT *, GROUP_CONCAT(id SEPARATOR ",") AS grouped_ids FROM table

0

यदि आपको कुछ गतिशीलता की आवश्यकता है, तो मैं GROUP_CONCAT की अनुशंसा नहीं करूंगा। GROUP_CONCAT की सीमा है। आप क्या कर सकते हैं एक temp तालिका का उपयोग करें जहां आप पहले सभी पंक्तियों का चयन कर सकते हैं, तो आप अपने समूहीकृत परिणाम प्राप्त कर सकते हैं। आईडी प्राप्त करने के लिए आप समूह को लूप कर सकते हैं और टेम्पलेट तालिका से WHERE क्लॉज के साथ चयन कर सकते हैं जिसमें सभी समूह शर्त के रूप में हैं। मुझे लगता है कि यह ऐसी चीज के लिए थोड़ा जटिल हो सकता है लेकिन मुझे लगता है कि यदि आपको वास्तव में आईडी का ट्रैक रखने की आवश्यकता है तो यह एक अच्छा समाधान है।

1

इस समस्या से निपटने के दौरान मैं क्या आया, group by में समूह के क्षेत्र में एक ही तालिका के साथ परिणाम में शामिल होना है। का चयन करता है ध्यान दें कि WHERE बयान दोनों में एक ही है

SELECT plan_id 
FROM promo_discounts pd 
JOIN (SELECT amount, operation, months, fee 
    FROM promo_discounts 
    WHERE promo_id = 1 
    GROUP BY amount, operation, months, fee 
) AS grup ON pd.amount = grup.amount 
      AND pd.operation = grup.operation 
      AND pd.months = grup.months 
      AND pd.fee = grup.fee 
WHERE promo_id = 1 

अब तुम तुम क्या चाहते

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