سؤال

أريد أن أطلب النتائج في وظيفة group_concat. المشكلة هي أن التحديد في وظيفة 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

هل يعرف أحد كيف يمكنني طلب B.ID في Group_Concat هنا؟

هل كانت مفيدة؟

المحلول

إذا كان أي شخص يهتم ، أعتقد أنني وجدت حلاً لمشكلة مماثلة على الأقل.

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 قبل الفاصل إذا كان هناك واحد.

نصائح أخرى

أعلم أن هذا قديم حقًا ، لكن الآن كنت أبحث عن إجابة وأعطاني إجابة @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

(وهو يعمل بالنسبة لي ، إذا لم يكن ذلك واضحًا :-))

لا أعرف طريقة قياسية للقيام بذلك. يعمل هذا الاستعلام ، لكنني أخشى أن يعتمد ذلك فقط على بعض تفاصيل التنفيذ:

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

لا حاجة للفرعية.

SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id)
FROM book_mast
GROUP BY pub_id
ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC;
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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top