我想订购在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 / 8月27日/ MySQL的最GROUP_CONCAT功能/

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