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 に答える