1

我有两个表 - 用户和模块。

在模块表中,我有两列 - module_id 和 module_name。

用户表有一个名为 user_modules 的列,我在其中存储了他可以以 csv 格式访问的模块。

例如。模块表中有两个模块

module_id    module_name

1            Manage Books
2            Manage Videos 

典型用户的 user_modules 列(在用户表中)如下所示

user_modules

1,2

现在我用来获取 module_name 的查询是

“从 module_id 所在的模块中选择 module_name(从 user_id = 1 的用户中选择 user_modules)” - 输出:管理书籍

这仅返回第一个模块的名称。

另一方面,这些查询工作得很好 -

“从 module_id 在 (1,2) 中的模块中选择 module_name” - 输出:管理书籍、管理视频

“从 user_id = 1 的用户中选择 user_modules” - 输出:1,2,3

如何在单个查询中获取所有模块名称?

4

1 回答 1

1
select user.user_id, module_name from module 
inner join user on find_in_set(module.module_id, user.user_modules) is not null

应该管用。如果用户 ID(字符串)在 user_modules(字符串)中,则 find_in_set 返回位置。如果不是,则返回 null。

或修改您的查询

'从 module_id 所在的模块中选择 module_name(从 user_id = 1 的用户中选择 user_modules)” - 输出:管理书籍

至:

Select module_name from modules 
where 
find_in_set(module_id, (Select user_modules from user where user_id = 1)) is not null
于 2013-09-17T09:56:30.040 回答