MySQL查询功能可牢记以前的记录

时间:2018-06-27 09:58:28

标签: mysql database function

首先,我无法拿出合适的头衔,欢迎提出建议。

我有一个存储用户和组的数据库。用户可以是多个组的一部分,并且组具有特定的“ 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

因为这不是我唯一需要的地方,所以我希望不使用任何过程。

感谢阅读

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么您需要按位最大值而不是整数最大值。这意味着,如果将任何组的某个位设置为1,则结果应为1。这对应于按位or操作。

MySQL具有按位聚合功能,其中包括bit_or()

  

返回expr中所有位的按位或。计算是   以64位(BIGINT)精度执行。

     

如果没有匹配的行,则BIT_OR()返回中性值(所有   位设置为0)。

因此,您只需在包含按用户ID分组的访问权限的字段上使用bit_or()