2012-04-26 10 views
20

क्या MySQL के Group_Concat फ़ंक्शन को नल शामिल करने का कोई विकल्प है?MySQL GROUP_CONCAT Nulls

मेरे स्रोत तालिका से निम्न उदाहरण पर विचार करें:

7, 4=1,5=2 

मैं निम्नलिखित प्राप्त करना चाहते हैं:

userId, questionId, selectionId 
7, 3, NULL 
7, 4, 1 
7, 5, 2 

जब मैं group_concat साथ चयन मेज पर क्वेरी, मैं निम्नलिखित मिलती है:

7, 3=NULL,4=1,5=2 

संदर्भ के लिए, मेरी क्वेरी इस तरह दिखती है:

Select userId, GROUP_CONCAT(CONCAT(questionId, '=', selectionId)) 
From selection 
Group by userId; 

मैं भी इस तरह की एक IFNULL जोड़ने की कोशिश की:

Select userId, GROUP_CONCAT(IFNULL(CONCAT(questionId, '=', selectionId), 'NULL')) 
From selection 
Group by userId; 

लेकिन वह निम्नलिखित का उत्पादन:

7, NULL,4=1,5=2 

नोट - वहाँ एक अन्य जटिलता है कि मैं शामिल करना भूल जाते है। चयन आईडी एक और तालिका के लिए एक विदेशी कुंजी है। मैं select_text तालिका में बाएं बाहरी शामिल होने का उपयोग करता हूं। मेरी वास्तविक क्वेरी में उस तालिका के फ़ील्ड शामिल हैं (चयन के बाद ये फ़ील्ड NULL को हल करती हैं ID शून्य है)।

+0

उत्पादित किया गया यह क्या करना चाहिए, चयन पर IFNULL आज़माएं, CONCAT पर नहीं। – piotrm

+0

यह काम किया। धन्यवाद। – David

+0

लेकिन आम तौर पर बोलते हुए- समूह कंसट के उपयोग से बचें! – IcedDante

उत्तर

22

तुम बस IFNULL स्तंभ NULL हो सकता है चाहिए;

SELECT userId, GROUP_CONCAT(CONCAT(questionId, '=', 
       IFNULL(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId; 

डेमो here

+0

बस यह समस्या थी। बहुत बढ़िया जवाब। मैंने आज अपने लिए कुछ नया सीखा है :) – b3tac0d3

2

आप सीधे selectionId मूल्य पर IFNULL या COALESCE उपयोग करना चाहिए:

SELECT 
    userId, 
    GROUP_CONCAT(CONCAT(questionId, '=', COALESCE(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId; 
संबंधित मुद्दे