КороткоНевозможно сделать побитовое ИЛИ операцию по MySQL Query INT поля
Пусть поле int
типа в моей таблице содержит любой двоичный четырехзначный номер (комбинация 0 и 1, например, 1010, 0110 и т.д.) , Как выборочно обновлять только некоторые из этих цифр без изменения других.
Деталь
У меня есть user_relevance_code
поля в моей permissions
таблицы (которая типа int(10)
), который хранит четыре цифры, которые представляют на долю которых приходятся типы этще разрешение имеет отношение к. Эти четыре цифры содержат 1 или 0 каждый смысл независимо от того, является ли это актуальным. Слева направо, актуальность этих типов счетов - Manager
, Publisher
, Advertiser
, Developer
хранится. Таким образом, значение 0110
, хранящееся в этом поле, будет означать, что оно имеет отношение к Менеджерам, Издателям и не относится к Рекламодателям.
Теперь, в любой момент времени, предположим, что мне нужно отметить некоторые из этих разрешений применительно к менеджерам или сделать их релевантными для рекламодателей и издателей и в то же время сделать их не соответствующими менеджерам, и все такие случайные операции. Для всех таких случаев мне нужно оставить другие цифры нетронутыми. Это означает, что если мне нужно обновить только идентификатор релевантности менеджера, я не должен касаться цифр издателя и рекламодателя.
Проблема
Очевидно, что мне нужно сделать операцию ИЛИ кода мне нужно применить с текущим значением user_relevance_code
и сохранить его, но это не работает для меня.
Для работы сделать некоторые разрешения соответствующих издателей, я попробовал этот запрос -
update permissions set user_relevance_code = (0100 | user_relevance_code) where <condition to update some permissions>
Но это не дало желаемых результатов. Те записи, которые ранее имели 1000
, были обновлены до 1004
, где я хотел, чтобы они стали 1100
(обновите только 2-ю цифру до 1 и оставите другие, как они есть).
Я также попытался изменить тип этого поля на binary
. Думаю, я делаю это неправильно.
Большое спасибо за объяснение, но 'select (b'0100 '| user_relevance_code) из ox_permissions, где user_relevance_code = 1000' также показывает' 1004' и 'update ox_permissions set user_relevance_code = (b'1000' | user_relevance_code), где user_relevance_code = 1000' не выполняет обновление. Не уверен, что я что-то упустил. –
@Sandeepan: 'where user_relevance_code = 1000' использует десятичное значение. Как выглядит ваш стол? И каковы данные на самом деле? Действительно ли 'user_relevance_code' является растровым изображением? –