Вкратце
Предположим, что поле типа int
в моей таблице содержит любое двоичное четырехзначное число (комбинация 0 и 1, например 1010, 0110 и т. Д.).Как выборочно обновить только некоторые из этих цифр, не изменяя другие.
Подробности
У меня есть поле user_relevance_code
в моей таблице permissions
(типа *)1013 *), в котором хранятся четыре цифры, представляющие, к каким типам учетных записей относится данное разрешение.Эти четыре цифры хранят 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
.Я думаю, что я делаю это неправильно.