首先,我无法拿出合适的头衔,欢迎提出建议。
我有一个存储用户和组的数据库。用户可以是多个组的一部分,并且组具有特定的“ authorityLevel”。 Authoritylevel是一个整数,其二进制形式表示授权(5为101,因此您对第一个和第三个选项具有授权,而对第二个选项则没有权限。
我进行的查询查找您的权限级别,检查所有组并选择最高的权限级别。 但这当然不起作用((如果您具有一个组的权限级别3(110),而另一组的权限级别5(101),则您应该具有权限级别7(111),但是它将选择最大值,即5)。 有没有一种方法可以使我可以在查询中放入的函数,该函数在每次找到值时都会查看二进制表示形式,然后返回适当的权限级别? (例如,MAX函数会查看所有找到的值,并进行比较)
当前查询“ SELECT MAX(managementAuthorityLevel)AS lvl来自用户u INNER JOIN CTgroupUser gu on u.ID = gu.user INNER JOIN group
g ON gu.group = g.name u.ID =的位置: ID;”
:ID为PHP PDO语句参数
logical model
因为这不是我唯一需要的地方,所以我希望不使用任何过程。
感谢阅读
答案 0 :(得分:2)
如果我正确理解了您的问题,那么您需要按位最大值而不是整数最大值。这意味着,如果将任何组的某个位设置为1,则结果应为1。这对应于按位or
操作。
MySQL具有按位聚合功能,其中包括bit_or():
返回expr中所有位的按位或。计算是 以64位(BIGINT)精度执行。
如果没有匹配的行,则BIT_OR()返回中性值(所有 位设置为0)。
因此,您只需在包含按用户ID分组的访问权限的字段上使用bit_or()
。