1

我必须使用 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,这显然会更容易,如下所示:

用户组表:

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 的查询中以某种方式做这样的事情?

4

1 回答 1

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, '|%');
于 2013-05-13T15:44:00.047 回答