簡単に言えば
テーブルのint
タイプ フィールドに 2 進数の 4 桁の数字 (0 と 1 の組み合わせ、1010、0110 など) が含まれているとします。他の数字を変更せずに、これらの数字の一部のみを選択的に更新するにはどうすればよいですか。
詳細テーブルには、この特定の権限が関連するアカウントの種類を表す 4 桁
のuser_relevance_code
フィールド(タイプは ) があります。これらの 4 桁には 1 または 0 が格納され、それぞれ関連するかどうかを意味します。左から右に、これらのアカウント タイプへの関連性 - 、、が格納されます。したがって、このフィールドに格納された値は、マネージャー、パブリッシャーに関連し、広告主には関連しないことを意味します。permissions
int(10)
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
。私はそれを間違っていると思います。