mysql查询功能,将以前的记录牢记在心

chhkpiq4  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(189)

首先,我想不出一个合适的标题,欢迎提出建议。
我有一个存储用户和组的数据库。用户可以是多个组的一部分,并且组具有特定的“authoritylevel”。authoritylevel是一个整数,其中二进制形式表示权限(5是101,因此第一个和第三个选项都有权限,第二个选项没有权限)。
我所做的查询查找您的权限级别,检查所有组并选择最高权限级别。但这当然行不通,(如果一个组有权限级别3(110),另一个组有权限级别5(101),那么应该有权限级别7(111),但它会选择最大值,即5)。有没有一种方法可以创建一个可以放入查询中的函数,每次找到一个值时都会查看二进制表示,然后返回适当的权限级别(例如,max函数会查看所有找到的值,并对它们进行比较)
当前查询“select max(managementauthorityvel)as lvl from user 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语句参数逻辑模型
因为这不是我唯一需要它的地方,我想不用程序就可以做到。
谢谢你的阅读

30byixjq

30byixjq1#

如果我正确理解你的问题,那么你需要一个位最大值,而不是整数的最大值。这意味着,如果任何一个组的位被设置为1,那么结果应该是1。这对应于按位 or 操作。
mysql具有按位聚合函数,其中包括位\或()
返回表达式中所有位的按位或。计算以64位(bigint)精度执行。
如果没有匹配的行,则bit_or()返回一个中性值(所有位都设置为0)。
所以你可以简单地使用 bit_or() 在包含按用户id分组的访问权限的字段上。

相关问题