在做权限管理的系统时:
group表中有一个rules字段(varchar),记录着组的规则id。 该id对应着rule表中的id。数据库用的mysql
如何将规则部分显示rule的名称
sql查询该怎么写。
在做权限管理的系统时:
group表中有一个rules字段(varchar),记录着组的规则id。 该id对应着rule表中的id。数据库用的mysql
如何将规则部分显示rule的名称
sql查询该怎么写。
注意 group 表名应该用 ` 符号。
假设表 group 是这样的
name | rules | |
---|---|---|
guest | 1,2 | |
user | 1,2,5 |
而表 rule 是这样的
id | name | |
---|---|---|
1 | r1 | |
2 | r2 | |
5 | r5 |
那么下面 SQL
SELECT group_name, GROUP_CONCAT(rule_name ORDER BY rule_id) AS rule_names FROM (
SELECT `group`.name as group_name, rule.name AS rule_name, rule.id AS rule_id
FROM `group` LEFT JOIN rule
ON find_in_set(rule.id, `group`.rules)
) AS t GROUP BY group_name;
的结果是
group_name | rule_names | |
---|---|---|
guest | r1,r2 | |
user | r1,r2,r5 |
个人理解如果数据库是这么设计的话,初衷是让在应用程序中处理:按照逗号分隔,逐条查询rule表,更常规的做法是用一个用户和规则的关联表。
如果非要用sql做关联查询,可以用FIND_IN_SET,不过效率不会太高。
select *
from
(select '1,2,3,4,5' ids) t1 inner join (select 1 id, '张三' name union select 2, '李四') t2
on FIND_IN_SET(t2.id, t1.ids) > 0
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答1.8k 阅读
3 回答2k 阅读
1 回答3.6k 阅读