记住以前记录的MySQL查询功能

标签 mysql database function

首先,我想不出一个合适的标题,欢迎提出建议。

我有一个存储用户和组的数据库。用户可以是多个组的一部分,并且组具有一定的“权限级别”。 Authoritylevel 是一个整数,其二进制形式表示权限(5 是 101,因此您对第一个和第三个选项具有权限,而对第二个则没有权限)。

我进行的查询查找您的权限级别,检查所有组并选择最高权限级别。 但这当然行不通,(如果你有一个组的权限级别 3(110),另一个组的权限级别 5(101),那么你应该有权限级别 7(111),但它会选择最大值,即 5)。 有没有一种方法可以创建一个可以放入查询中的函数,它会在每次找到值时查看二进制表示,然后返回正确的权限级别? (例如 MAX 函数,查看所有找到的值,并比较它们)

当前查询 "SELECT MAX(managementAuthorityLevel) AS lvl FROM user u INNER JOIN CTgroupUser gu on u.ID = gu.user INNER JOIN group g ON gu.group = g.name WHERE u. ID = :ID;" :ID 是 PHP PDO 语句参数 logical model

因为这不是我唯一需要它的地方,所以我想在不使用过程的情况下完成它。

感谢阅读

最佳答案

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

MySQL有按位聚合函数,包括bit_or() :

Returns the bitwise OR of all bits in expr. The calculation is performed with 64-bit (BIGINT) precision.

If there are no matching rows, BIT_OR() returns a neutral value (all bits set to 0).

因此您可以简单地在包含按用户 ID 分组的访问权限的字段上使用 bit_or()

关于记住以前记录的MySQL查询功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059810/

相关文章:

function - Lua与继承: unable to access self object in functions

php - 计算特定行/偏移量的分页偏移量

php - 在 mySQL 的多个 PHP 页面上使用变量

php - mysql_connect() : Headers and client library minor version mismatch Library:100005

java - 从 firebase 检索图像时出错

java - 我应该如何对数据库进行建模,以便数据库中的每个学生实体都有与每个类(class)实体相关的成绩?

mysql - INSERT 与 LOAD DATA LOCAL INFILE 的速度

C# - 无法访问 C++/CLI .dll 中包含的方法

c - 如何让函数接收指针作为参数?

php - JOIN 和 AND 后的订单查询