众所周知,MySQL是关系型数据库,我们在处理关系的方式可以通过外键,也可以通过用一个字段去存储另一张表的唯一值,下面说一下我当前的场景
table1:user表
table2:team表
id | team_name | team_owner | team_leaders |
自增主键 | 团队1 | zhangsan | lisi,wangwu |
其中,team表是这样的结构,首先从业务方面:team_owner最多1个人,而team_leaders字段是不确定的,有可能无leader,有可能1个,有可能多个,那么也可以看得出来,对于这个角色我用的是字符串类型,这个时候,我想要让这张表与user表通过join查询匹配对应的人名字,怎么让team_leaders字段的姓名匹配出来呢??
select t.id,group_concat(u.name) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id
id | group_concat(u.name) |
1 | 李四,王五 |
但是,这里遇到的一个问题是:find_in_set是获取到位置,按获取到的位置排序,再group concat,就是如果在user表里,wangwu的id是1,lisi的id是2,,那么查出来的结果就是这样的:它会以user表的索引去排序,有可能会颠倒我team表里这个字段的顺序
id | group_concat(u.name) |
1 | 王五,李四 |
这里需要再去排序以下
select t.id,group_concat(u.name order by find_in_set(u.username,t.team_leaders)) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id