MySQL GROUP BY的问题

MySQL GROUP BY的问题,mysql,sql,Mysql,Sql,我正在尝试构建一个SQL查询,该查询应该显示所有用户活动,而不是汇总或任何内容,只是执行的每个活动的完整列表 我遇到的问题是,我似乎无法通过工作来获得团队成员,从而打印出每个用户的活动 SQLFIDLE= 最后,我将构建这个JSON对象: users: [{ userid: '1', name: 'John', activities: [{ activity_typeid: 6431, time: "2013-01-01 00:00:00",

我正在尝试构建一个SQL查询,该查询应该显示所有用户活动,而不是汇总或任何内容,只是执行的每个活动的完整列表

我遇到的问题是,我似乎无法通过工作来获得团队成员,从而打印出每个用户的活动

SQLFIDLE=

最后,我将构建这个JSON对象:

users: [{
    userid: '1', 
    name: 'John',
    activities: [{
       activity_typeid: 6431,
       time: "2013-01-01 00:00:00",
       activity_weight: 20
      }, {
       activity_typeid: 6431,
       time: "2013-01-01 00:00:00",
       activity_weight: 20
    }]
}, {
    userid: '2', 
    name: Peter',
    activities: [{
       activity_typeid: 6431,
       time: "2013-01-01 00:00:00",
       activity_weight: 20
      }
    }]
}]    
SQL:


我想在这种情况下,您不需要分组<代码>按订购仍然有意义。例如:

SELECT activity_typeid, userid, time, activity_weight, activityname
FROM activity_entries
WHERE competitionid = '52a99783c5d6f'
ORDER BY userid

然后可以循环查询结果。如果当前数据的
userid
与以前的数据不同,请创建新的
user
对象,否则只需将新的
activity
添加到现有的
user
对象的
活动
我想您需要使用
group_concat()


这将把活动放在一个字符串中,每个活动用分号分隔。然后用逗号分隔各个组件。

因此我尝试了这个方法,但它没有列出用户执行的所有活动。请看,您是否知道无效使用
group by
操作符将在MySQL中返回随机数据:然后您需要将“WHERE competitionid='52a99783c5d6f'”更改为“WHERE userid=someuser”或者只需添加“WHERE competitionid=compid AND userid=someuser”并丢失groupby,在他的示例中,JSON对象有多个用户,因此您不需要在
WHERE
子句中使用
userid=someuserid
groupby
用于将多行组合成一行。如果你想得到所有用户的活动,你不需要它。只需循环遍历结果,并将每一行作为对象添加到数组中即可。SQL无法直接创建JSON。您需要在应用程序中使用逻辑来创建嵌套数组。
SELECT activity_typeid, userid, time, activity_weight, activityname
FROM activity_entries
WHERE competitionid = '52a99783c5d6f' AND userid = someuserid
SELECT activity_typeid, userid, time, activity_weight, activityname
FROM activity_entries
WHERE competitionid = '52a99783c5d6f'
ORDER BY userid
SELECT userid, username, 
       group_concat(concat_ws(',', activity_typeid, time, activity_weight) separator '; ') as activities
FROM activity_entries
WHERE competitionid = '52a99783c5d6f'
GROUP BY userid;