Функция запроса MySQL, которая сохраняет предыдущие записи - PullRequest
0 голосов
/ 27 июня 2018

Во-первых, я не смог придумать правильное название, предложения приветствуются.

У меня есть база данных, в которой хранятся пользователи и группы. пользователи могут входить в состав нескольких групп, и группы имеют определенный уровень «authorLevel». Уровень авторизации - это целое число, двоичная форма которого представляет полномочия (5 - 101, поэтому у вас есть полномочия для первого и третьего варианта, но нет для второго).

Запрос, который я сделал, проверяет ваш уровень полномочий, проверяет все группы и выбирает самый высокий уровень полномочий. но это, конечно, не работает (если у вас есть уровень полномочий 3 (110) из одной группы и уровень полномочий 5 (101) из другой группы, то у вас должен быть уровень полномочий 7 (111), но он выберет макс, что 5). Есть ли способ, которым я могу сделать функцию, которую я могу поставить в запросе, который просматривает двоичное представление каждый раз, когда находит значение, а затем возвращает правильный уровень полномочий? (например, функция MAX просматривает все найденные значения и сравнивает их)

текущий запрос "ВЫБЕРИТЕ МАКС. (ManagementAuthorityLevel) КАК УРОВЕНЬ ОТ ПОЛЬЗОВАТЕЛЯ ВНУТРЕННЕГО СОЕДИНЕНИЯ CTgroupUser gu на u.ID = gu.user ВНУТРЕННЕЕ РЕШЕНИЕ group g ON gu.group = g.name WHERE u.ID =: ID; " with: ID является параметром оператора PHP PDO логическая модель

потому что это не единственное место, где мне это нужно, я бы хотел сделать это без использования процедуры.

спасибо за чтение

1 Ответ

0 голосов
/ 27 июня 2018

Если я правильно понимаю ваш вопрос, то вам нужен побитовый максимум, а не максимум всего числа. Это означает, что если бит установлен в 1 для любой из групп, то результат должен быть 1. Это соответствует побитовой операции or.

MySQL имеет побитовые агрегатные функции, которые включают bit_or () :

Возвращает побитовое ИЛИ всех битов в выражении. Расчет выполняется с 64-битной (BIGINT) точностью.

Если подходящих строк нет, BIT_OR () возвращает нейтральное значение (все биты установлены в 0).

Таким образом, вы можете просто использовать bit_or() в поле, содержащем права доступа, сгруппированные по идентификатору пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...