2009-10-16 3 views
20

मैं परिणामों को GROUP_CONCAT फ़ंक्शन में ऑर्डर करना चाहता हूं। समस्या यह है, कि group_concat-समारोह में चयन (कल्पना का चयन करें) इस तरह एक और समारोह है,:इसमें एक फ़ंक्शन के साथ एक MySQL GROUP_CONCAT में ऑर्डर करना

SELECT a.name, 
    GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name) ORDER BY b.id ASC) AS course 
FROM people a, stuff b, courses c 
GROUP BY a.id 

मैं की तरह (b.id द्वारा आदेश दिया) एक परिणाम प्राप्त करना चाहते हैं:

michael 1:science,2:maths,3:physics 

लेकिन मैं मिलता है:

michael 2:maths,1:science,3:physics 

किसी को भी पता है कि कैसे मैं यहाँ मेरी group_concat में b.id से आदेश कर सकते हैं?

+2

[GROUP_CONCAT] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat) अपने स्वयं के 'ऑर्डर' का समर्थन करता है BY 'खंड ... यह नहीं जानते कि उपयोगकर्ता द्वारा परिभाषित कार्य क्या है, या करता है, हमें आपकी सहायता करने में सक्षम होने में सहायता नहीं करेगा। –

+0

यह वही है जैसा मैंने लिखा था: "group_concat" फ़ंक्शन के भीतर फ़ंक्शन "concat_ws"। मैंने कभी नहीं कहा कि यह एक उपयोगकर्ता परिभाषित समारोह था। – acme

+0

यह स्पष्ट नहीं है कि एक वैध समाधान कैसे लिखना है, क्योंकि टेबल संरचना, सामग्री और तालिकाओं के बीच संबंध अनिर्दिष्ट है (यानी विनिर्देशों में कोई शामिल नहीं है)। – outis

उत्तर

37

किसी को भी परवाह नहीं करते हैं, तो मुझे लगता है कि मैं कम से कम एक ऐसी ही समस्या के लिए एक समाधान मिल गया।

http://mahmudahsan.wordpress.com/2008/08/27/mysql-the-group_concat-function/

select GROUP_CONCAT(columnName order by someColumn SEPARATOR '|') from tableName where fieldId = p.id 

द्वारा आदेश विभाजक से पहले group_concat में चला जाता है अगर वहाँ एक है।

+0

अच्छा खोज !! साझा करने के लिए धन्यवाद! – rckehoe

+0

बहुत बढ़िया, इसने मेरे जीवन को बचाया – Nadeeshaan

+0

अच्छा है !! –

2

मुझे ऐसा करने के लिए एक मानक तरीका नहीं पता है। इस क्वेरी से काम करता है, लेकिन मुझे डर लग रहा है कि यह सिर्फ कुछ कार्यान्वयन विस्तार पर निर्भर करता है:

SELECT a_name, group_concat(b_id) 
FROM (
    SELECT a.name AS a_name, b.id AS b_id 
    FROM tbl1 a, tbl2 b 
    ORDER BY a.name, b.id) a 
GROUP BY a_name 
+0

थोड़ा सा शोध करने के बाद ऐसा लगता है कि मैं जो पूछता हूं वह संभव नहीं है। फिर भी धन्यवाद! – acme

+0

ने इसे आजमाया, किसी भी तरह – slier

0
SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id) 
FROM book_mast 
GROUP BY pub_id 
ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC; 
+1

काम नहीं करता है, मैं संपूर्ण परिणामों को 'GROUP_CONCAT' में समेकित तत्वों को ऑर्डर करना चाहता हूं। – acme

0
SELECT generated.name, GROUP_CONCAT(generated.data) 
FROM (
    SELECT people.name, CONCAST_WS(":", stuff.id, courses.name) data 
    FROM people, stuff, courses 
    ORDER BY stuff.id, people.name 
) generated 
GROUP BY generated.name 
2

उप-चयनों की कोई आवश्यकता नहीं है।

SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data 
FROM people, stuff, courses 
ORDER BY stuff.id, people.name 
3

मैं जानता हूँ कि यह वास्तव में पुराना है, लेकिन अभी मैं एक जवाब और @ korny के जवाब के लिए देख रहा था मुझे इस के लिए विचार दिया:

SELECT a.name, 
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name) 
      ORDER BY CONCAT_WS(':', b.id, c.name) ASC) AS course 
FROM people a, stuff b, courses c 
GROUP BY a.id 

(और यह मेरे लिए काम करता है कि अगर स्पष्ट नहीं था :-))

+0

मुझे बिल्कुल यकीन नहीं है, लेकिन मेरा मानना ​​है कि यह 'GROUP_CONCAT (DISTINCT CONCAT_WS (':', b.id, c.name) आदेश 1) के उपयोग के समान है। जो बहुत आसान है, अगर यह काम करता है! – Doin

+0

यह मुझे कुछ नया सिखाया गया है, धन्यवाद! :-) – AMeiri

+0

हां! वास्तव में सही जवाब !!! (निश्चित रूप से कोई भी ओपी क्या कर रहा है! हम इस पृष्ठ पर हैं क्योंकि हम जानना चाहते हैं कि ऑर्डर में DISTINCT Func (...) के परिणामों का संदर्भ कैसे लें, और जवाब है कि आपको बस कॉल करने की आवश्यकता है फिर से Func।) – HoldOffHunger

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