是否可以执行按位分组功能?
我在包含按位标志的表中有一个字段.例如,假设有三个标志: 4 =>阅读,2 =>写,1 =>执行
,表格看起来像这样*
:
I have a field in a table which contains bitwise flags. Let's say for the sake of example there are three flags: 4 => read, 2 => write, 1 => execute
and the table looks like this*
:
user_id | file | permissions
-----------+--------+---------------
1 | a.txt | 6 ( <-- 6 = 4 + 2 = read + write)
1 | b.txt | 4 ( <-- 4 = 4 = read)
2 | a.txt | 4
2 | c.exe | 1 ( <-- 1 = execute)
我有兴趣找到在任何记录上设置特定标志(例如:写入)的所有用户.为了在一个查询中执行此操作,我认为如果您将所有用户的权限组合在一起,您将获得一个值,即他们权限的总和":
I'm interested to find all users who have a particular flag set (eg: write) on ANY record. To do this in one query, I figured that if you OR'd all the user's permissions together you'd get a single value which is the "sum total" of their permissions:
user_id | all_perms
-----------+-------------
1 | 6 (<-- 6 | 4 = 6)
2 | 5 (<-- 4 | 1 = 5)
*
我的实际表格与文件或文件权限无关,只是一个例子
有没有一种方法可以在一个语句中执行此操作?在我看来,它与带有 GROUP BY 的普通聚合函数非常相似:
Is there a way I could perform this in one statement? The way I see it, it's very similar to a normal aggregate function with GROUP BY:
SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id
...但很明显,一些神奇的按位或"函数而不是 SUM.有谁知道类似的吗?
...but obviously, some magical "bitwise-or" function instead of SUM. Anyone know of anything like that?
(对于奖励积分,它在 oracle 中有效吗?)
(And for bonus points, does it work in oracle?)
推荐答案
MySQL:
SELECT user_id, BIT_OR(permissions) as all_perms
FROM permissions
GROUP BY user_id
相关文章