我有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
,那么我将获得重复表格行的所有结果。
但我希望每次都能显示每个学生的名字。
你能在这段代码中告诉我我的错误吗?
答案 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