【发布时间】:2012-02-04 00:56:34
【问题描述】:
简述
假设我的表中的 int 类型字段包含任何二进制四位数字(0 和 1 的组合,例如 1010、0110 等)。如何有选择地只更新其中一些数字而不更改其他数字。
详情
我的permissions 表(类型为int(10))中有一个user_relevance_code 字段,它存储了四位数字,表示与此特定权限相关的帐户类型。这四个数字分别存储一个 1 或 0,表示它是否相关。从左到右,存储与这些帐户类型的相关性 - Manager、Publisher、Advertiser、Developer。因此,存储在此字段中的值 0110 意味着它与经理、发布者相关,而与广告商无关。
现在,在任何时候,假设我需要将其中一些权限标记为与经理相关,或者使它们与广告商和发布商相关,同时使它们与经理无关,以及所有此类随机操作.对于所有这些情况,我需要保持其他数字不变。这意味着,如果我只需要更新经理相关性数字,我不应该接触发布商和广告客户的数字。
问题
很明显,我需要对需要应用的代码与user_relevance_code 的当前值进行二进制 OR 并存储它,但这对我不起作用。
为了使一些与发布者相关的权限的操作,我尝试了这个查询 -
update permissions set user_relevance_code = (0100 | user_relevance_code) where <condition to update some permissions>
但这并没有产生预期的结果。之前有1000 的那些记录更新为1004,我希望它们变为1100(仅将第2 位更新为1,其他保持不变)。
我还尝试将该字段的类型更改为binary。我想我做错了。
【问题讨论】:
标签: mysql bit-manipulation or-operator