眾所周知,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
