は2つの段階でそれを行います。第1段階はg_idでグループを使用し、第2段階はグループなしでgroup_concatを使用します。
drop table if exists t;
create table t(u_id int,g_id int,S_id int,tn int);
insert into t values
(1,1234,158990,30),
(1,1234,158991,60),
(1,3211,9988,-55),
(1,3211,9989,65);
select concat('{',group_concat(g_id,':{',gc,'}'),'}')
from
(SELECT g_id ,GROUP_CONCAT(s_id,':',tn) gc
FROM t WHERE u_id = 1 and g_id in (1234,3211)
group by g_id
ORDER by g_id
) s
結果
+------------------------------------------------------+
| concat('{',group_concat(g_id,':{',gc,'}'),'}') |
+------------------------------------------------------+
| {1234:{158990:30,158991:60},3211:{9988:-55,9989:65}} |
+------------------------------------------------------+
1 row in set (0.04 sec)
ありがとうP.Salmon。それは好きだった魅力が働いた。 –