У меня есть поле в таблице, которое содержит побитовые флаги. Скажем, для примера есть три флага: 4 => read, 2 => write, 1 => execute
и таблица выглядит следующим образом *
:Возможно ли выполнить поразрядную групповую функцию?
user_id | file | permissions
-----------+--------+---------------
1 | a.txt | 6 (<-- 6 = 4 + 2 = read + write)
1 | b.txt | 4 (<-- 4 = 4 = read)
2 | a.txt | 4
2 | c.exe | 1 (<-- 1 = execute)
Я заинтересован, чтобы найти всех пользователей, которые имеют определенный набор флагов (например, запись) на любой записи , Для того, чтобы сделать это в одном запросе, я понял, что если вы все разрешения OR-нут пользователя вместе вы получите одно значение, которое является «сумма» их разрешений:
user_id | all_perms
-----------+-------------
1 | 6 (<-- 6 | 4 = 6)
2 | 5 (<-- 4 | 1 = 5)
*
Моего фактическим таблица не относится к файлам или разрешениям файлов, но это пример
Есть ли способ, которым я мог бы выполнить это в одном заявлении? Как я понимаю, это очень похоже на нормальную агрегатную функцию с GROUP BY:
SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id
... но, очевидно, некоторая волшебная «побитовой или» функция вместо SUM. Кто-нибудь знает что-нибудь подобное?
(А для бонусных очков, он работает в оракула?)
Как всегда, MySQL пинает оракула. – nickf