ВЫБРАТЬ пользователей из базы данных MySQL по битовой маске привилегий?

У меня есть таблица пользователей, и я хочу ВЫБРАТЬ некоторые строки по критериям битовой маски. Я попытаюсь объяснить свою проблему на небольшом примере.

Структура таблицы пользователи

user_id             int           [primary key, auto_increment]
user_email          varchar(200)    
user_privileges     int

Примечание:У него больше полей, но они не имеют отношения к этому вопросу.

Заполненная таблица может выглядеть так

+---------+--------------------+-----------------+
| user_id | user_email         | user_privileges |  << binary
+---------+--------------------+-----------------+
| 1       | john@example.com   | 165             |  10100101
| 2       | max@example.com    | 13              |  00001101
| 3       | trevor@example.com | 33              |  00100001
| 4       | paul@example.com   | 8               |  00001000
| 5       | rashid@example.com | 5               |  00000101
+---------+--------------------+-----------------+

Теперь я хочу ВЫБРАТЬ пользователей по определенной битовой маске привилегий (по столбцу user_privileges).

Например:

  • битовая маска=1[00000001] выберет пользователя -идентификаторы 1, 2, 3 и 5
  • битовая маска=9[00001001] выберет пользователя -id 2 только
  • битовая маска=5[00000101] выберет пользователя -идентификаторы 1, 2 и 5
  • битовая маска=130[10000010] выберет нет

Мой вопрос:Возможно ли это из запроса или мне нужно пройти всех пользователей по одному -по -и проверить это значение из кода PHP? Кроме того, возможно ли, чтобы поле пользователь _привилегии было text, содержащее шестнадцатеричные числа вместо целых чисел? Мне нужен рабочий пример запроса mysql.

Примечание:Это всего лишь простой пример с установленной 8 -битной привилегией -. В реальной среде он может иметь большие наборы (большие целые числа, больше байтов ). Создание отдельного столбца для каждого состояния привилегий работает нормально, но это невозможное решение. Я бы предпочел работать с шестнадцатеричными значениями, но и с целыми числами тоже все в порядке, лучше что-то, чем ничего.

Спасибо заранее.

18
задан Wh1T3h4Ck5 16 June 2012 в 00:04
поделиться