我必须使用MySQL数据库,其中一些列具有保存在一列中的不同ID,由管道字符分隔。例如:
用户表:
id | username | groups
1 | user1 | 1|2|3|5
组ID对应于组。它显示了用户所在的组。因此,还有一个Groups
表:
群组表:
id | groupname
1 | group1
2 | group2
3 | group3
4 | group4
5 | group5
我想要做的是选择一个用户,然后选择该用户所在的所有groupnames
,例如JOIN
。对于user1
, 所有 组 除了 group4
。
如果将这些组保存在另一个名为user_groups
的表中,这显然会更容易,这可能如下所示:
user_groups表:
fk_user_id | fk_group_id
1 | 1
1 | 2
1 | 3
1 | 5
但是,遗憾的是我无法更改数据库架构,因为整个系统已基于此。
我想知道在单个查询中选择用户时是否有一种获取所有组名的智能方法。例如,结果可能如下所示:
id | username | groups | groupnames
1 | user1 | 1|2|3|5 | group1|group2|group3|group5
有可能以某种方式在MySQL的一个查询中做这样的事情吗?
答案 0 :(得分:2)
在MySQL中,您可以使用find_in_set()
进行此类连接:
select *
from user u join
groups g
on find_in_set(g.groupname, u.groups) > 0;
在MySQL或其他数据库中,您也可以使用like
:
select *
from user u join
groups g
on concat('|', g.groupname, '|') like concat('%|', u.groups, '|%');