如何使用Group by和Concate对多个记录进行单个id

时间:2016-11-11 12:21:59

标签: php mysql

我有3张桌子。

  1. 学生
  2. group_members
  3. 我会将所有学生数据显示到表中,并附上他们加入的组名。 可能是学生加入了很多小组,我想在一个表格栏中用逗号显示他们的小组名称。

    这是我的SQL代码:

    SELECT `users`.*,`groups`.`gr_name`,`id` as `uid` FROM `users` 
    LEFT JOIN `group_members` ON `users`.`id` = `group_members`.`gm_telebe` 
    LEFT JOIN `groups` ON `group_members`.`gm_group` = `groups`.`gr_id` 
    WHERE `users`.`level` < 5 GROUP by `id` 
    ORDER by `reg_date` DESC;
    

    如果我删除GROUP by id,那么我将获得重复表格行的所有结果。 但我希望每次都能显示每个学生的名字。

    你能在这段代码中告诉我我的错误吗?

1 个答案:

答案 0 :(得分:2)

GROUP_CONCAT将以逗号分隔的值汇总。

以下是修改过的查询:

SELECT `users`.*, GROUP_CONCAT(`groups`.`gr_name`) AS group_name, `id` as `uid`
FROM `users` LEFT JOIN `group_members` ON `users`.`id` = `group_members`.`gm_telebe`
LEFT JOIN `groups` ON `group_members`.`gm_group` = `groups`.`gr_id`
WHERE `users`.`level` < 5 GROUP by `id` ORDER by `reg_date` DESC;

参考:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat