23

我想在 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

有谁知道我如何在我的 group_concat 中按 b.id 订购?

4

6 回答 6

43

如果有人在乎,我想我至少找到了类似问题的解决方案。

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 中。

于 2012-11-03T02:18:15.173 回答
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

(如果不清楚的话,它对我有用:-))

于 2015-11-04T20:53:13.247 回答
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
于 2009-10-16T13:25:30.257 回答
2

不需要子选择。

SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
于 2014-01-22T20:42:39.017 回答
0
SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id)
FROM book_mast
GROUP BY pub_id
ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC;
于 2011-06-18T19:57:36.650 回答
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
于 2012-09-26T21:52:15.520 回答