mysql - 带枚举的条件分组

标签 mysql sql

我在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/

相关文章:

mysql - 主键列不在 GROUP BY 中

php - SQL 添加不起作用

sql - 我如何在 postgresql 中使用 aes-256 加密?

MySQL查询优化。许多 SELECT + INNER JOIN

php - 从表单中的第二个表发布变量

MySQL SELECT 记录 WHERE if value = 'E' ELSE value = 'N'

sql - 仅在 bit = 1 时使用 where 子句

c# - MySQL asp.net 字符集不能正常工作

mysql - SQL:从具有成员 ID 的另一个表获取成员和上线成员的全名

python - 如何用Python访问MySQL?