Битовые операции в MySQL (Работа с флагами)
#Установить флаг 0x2:
UPDATE `table` SET `flag`=`flag` | (0x2);
#Установить сразу несколько битов (0x1 и 0x2):
UPDATE `table` SET `flag`=`flag` | (0x1|0x2);
#Удалить флаг 0x2:
UPDATE `table` SET `flag`=`flag` &~ (0x2);
#Удалить сразу несколько битов (0x1 и 0x2):
UPDATE `table` SET `flag`=`flag` &~ (0x1|0x2);
#Проверка наличия флага 0x2:
SELECT * FORM `table` WHERE (`flag` & 0x2) != 0
#Тоже самое для проверка наличия хотя бы одного бита маски 0x3. То есть если установлены биты 0x1 или 0x2.
SELECT * FORM `table` WHERE (`flag` & 0x3) != 0
#Проверка наличия всех битов маски 0x3. То есть если установлены биты 0x1 и 0x2 одновременно.
SELECT * FORM `table` WHERE (`flag` & 0x3) = 0x3
Шпаргалка по битовым операциям:
0x1|0x2 = 0x3 // сложение
0x3&0x2 = 0x2
0x1&0x2 = 0x0
0x3&~0x2 = 0x1