MySQL функция преобразование битовой маски в множество

MySQL функция преобразование битовой маски в множество, в данном случае, 10-тичного вида битовой маски.

Не так давно, я попытался написать подробную (с примерами, как для себя) инструкцию, применения битовой маски в MySQL запросах.
Сегодня мне пришлось немного расширить функционал своего модуля и дописать выборку из другой таблице по полю значений маски. Не буду увлекаться подробностями, скажу только, что кроме как разложить битовую маску на множество (строку) вида «1,3,7» для использование в условии:

WHERE `field` IN(1,3,7)

Для этих целей решил набросать маленькую MySQL функцию.
В качестве аргумента, функция принимает INT число — значение битовой маски (10 разряд).
Результатом работы функции будет строка вида «1,3,7», соответствующая номерам битов с значением 1.

Сама функция имеет комментарии и потому дополнительно описывать её не вижу смысла.

Читать дальше

Создание и использование битовой маски в PHP

PHP

Пример создание и использование битовой маски в PHP

Пишу этот материал только потому, что сам долго вникал, что к чему)))
Наверное, чтоб проще понять как использовать битовую маску (bitmask), нужно на примере показать, для чего она используется.

Пример использования битовой маски:
Задача
На сайте есть система опроса пользователей, которая содержит 10 вариантов ответа. Каждый вариант имеет свой уникальный номер — ID. Ответы нужно сохранять в БД.

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

Предположим, что модуль голосования прислал нам массив результатов:
array(1,2,3,12);
это значит, что пользователь указал в голосовании пункты 1,2,3,12. Давайте представим результат нашего голосования как строку из 0 и 1, в которой 1 соответствуют выбранные в голосовании пункты. В результате такого преобразования мы получим число 100000000111 в двоичной системе, что будет соответствовать числу 2055 в десятичной системе.


Читать дальше