我在DATABASE DESIGN 方面遇到了一些问题。
给出的是下表:
group_id | right_id | mode
----------------------------
1 | 1 | edit
----------------------------
1 | 2 | edit
----------------------------
3 | 1 | read
----------------------------
3 | 3 | read
----------------------------
1 | 3 | edit
----------------------------
4 | 3 | denied
----------------------------
例如,现在我需要第 1 组和第 3 组的所有权限。 为了防止出现双重结果,我想按 right_id 对结果进行分组 问题是模式列。正如您可能建议的那样,该模式决定了您是否被允许阅读或编辑某些内容(或者没有“拒绝”)
我希望在最终结果中使用最高权限 第 1 组和第 3 组的权利结果应如下所示:
right_id | mode
----------------------------
1 | edit
----------------------------
2 | edit
----------------------------
3 | edit
----------------------------
必须覆盖第 3 组的读取模式。
我完全不知道如何解决这个问题。我可以在 php 中完成此操作,但如果可能的话,我希望在一个查询中完成此操作。
如果没有条件组,选择哪种模式似乎完全是随机的。
除了模式是一个带有值的枚举
'denied', 'read', 'edit'
附言
我已经阅读了上面几乎所有建议的链接,但没有一个有用:(
谢谢! :)
最佳答案
尝试:
select right_id,
case max(mode+0)
when 1 then 'denied'
when 2 then 'read'
when 3 then 'edit'
end highest_privilege
from mytable
where group_id in (1,3)
group by right_id
SQLFiddle here .
关于mysql - 带枚举的条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130851/