क्या मैं एक से अधिक MySQL पंक्तियों को एक क्षेत्र में जोड़ सकता हूं?




concat group-concat (6)

एकाधिक, व्यक्तिगत पंक्तियों को संयोजित करने के लिए वैकल्पिक वाक्यविन्यास

चेतावनी: यह पोस्ट आपको भूख लगी है।

दिया हुआ:

मैंने खुद को कई अलग-अलग पंक्तियों का चयन करना चाहते हैं- एक समूह के पुनर्स्थापना-और एक निश्चित क्षेत्र पर संयोजित करना।

मान लीजिए कि आपके पास उत्पाद आईडी और उनके नाम और कीमतों की एक सारणी है:

+------------+--------------------+-------+
| product_id | name               | price |
+------------+--------------------+-------+
|         13 | Double Double      |     5 |
|         14 | Neapolitan Shake   |     2 |
|         15 | Animal Style Fries |     3 |
|         16 | Root Beer          |     2 |
|         17 | Lame T-Shirt       |    15 |
+------------+--------------------+-------+

तब आपके पास कुछ फैंसी-स्कैन्सी अजैक्स है जो इन पिल्लों को चेकबॉक्स के रूप में सूचीबद्ध करता है।

आपका भूख-हिप्पो उपयोगकर्ता 13, 15, 16 का चयन करता है। आज उसके लिए कोई मिठाई नहीं ...

खोजें:

शुद्ध mysql के साथ, एक पंक्ति में अपने उपयोगकर्ता के आदेश को सारांशित करने का एक तरीका।

उपाय:

IN खंड के साथ GROUP_CONCAT उपयोग करें:

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

कौन सा आउटपुट:

+------------------------------------------------+
| order_summary                                  |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+

बोनस समाधान:

यदि आप कुल मूल्य भी चाहते हैं, तो SUM() में टॉस करें:

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16);
+------------------------------------------------+-------+
| order_summary                                  | total |
+------------------------------------------------+-------+
| Double Double + Animal Style Fries + Root Beer |    10 |
+------------------------------------------------+-------+

पीएस: क्षमा करें अगर आपके पास पास -इन-आउट नहीं है ...

MySQL का उपयोग करके, मैं कुछ ऐसा कर सकता हूं:

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

मेरा आउटपुट:

shopping
fishing
coding

लेकिन इसके बजाय मैं सिर्फ 1 पंक्ति, 1 कॉल चाहता हूँ:

अपेक्षित उत्पादन:

shopping, fishing, coding

कारण यह है कि मैं एकाधिक तालिकाओं से कई मानों का चयन कर रहा हूं, और सभी शामिल होने के बाद मुझे अपनी पसंद की तुलना में बहुत अधिक पंक्तियां मिल गई हैं।

मैंने MySQL दस्तावेज़ पर एक फ़ंक्शन की तलाश की है और यह CONCAT या CONCAT_WS फ़ंक्शन परिणाम सेट स्वीकार नहीं करता है, तो क्या कोई यहां जानता है कि यह कैसे करें?


MySQL (5.6.13) सत्र चर और असाइनमेंट ऑपरेटर का उपयोग निम्न की तरह करें

SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;

तो आप प्राप्त कर सकते हैं

test1,test11

आप group_concat_max_len पैरामीटर को सेट करके GROUP_CONCAT मान की अधिकतम लंबाई बदल सकते हैं।

GROUP_CONCAT में विवरण देखें।


इसे इस्तेमाल करे:

DECLARE @Hobbies NVARCHAR(200) = ' '

SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;

मेरे पास एक और जटिल क्वेरी थी, और पाया कि मुझे काम करने के लिए बाहरी क्वेरी में GROUP_CONCAT का उपयोग करना था:

मूल प्रश्न:

SELECT DISTINCT userID 
FROM event GROUP BY userID 
HAVING count(distinct(cohort))=2);

बिखर गया:

SELECT GROUP_CONCAT(sub.userID SEPARATOR ', ') 
FROM (SELECT DISTINCT userID FROM event 
GROUP BY userID HAVING count(distinct(cohort))=2) as sub;

उम्मीद है कि यह किसी की मदद कर सकता है।


मेरे मामले में मेरे पास आईडी की एक पंक्ति थी, और इसे चारों ओर डालने में सक्षम था, अन्यथा, परिणाम बाइनरी प्रारूप में एन्कोड किया गया था:

SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table






group-concat