25

ユーザー権限がビットマスクとして保存されている mysql テーブルがあります。

|user   | permissions |
| Admin | 31          |
| User  | 13          |

           16 8  4  2  1
Admin ->   1  1  1  1  1  -> 16 + 8 + 4 + 2 + 1 -> 31
User  ->   0  1  1  0  1  ->  8 + 4 + 1 -> 13

ここで、SQL クエリを使用してすべてのユーザーにアクセス許可を追加したいと考えています。別のビットを変更せずに、全員に許可 16 を追加したいとしましょう。

 UPDATE users SET permission = ????

どうすればいいですか?

4

2 に答える 2

49

許可 16 を追加するには、次のように言います。

UPDATE users SET permission = permission | 16;

ビットごとの OR 演算子は、ビットをオンにします。それらをオフにするには、オフにするビットの補数で AND 演算を使用します。

UPDATE users SET permission = permission & ~16
于 2012-10-17T07:06:47.867 に答える
4

MySQL の SETを調べる必要があります。それはあなたの人生をずっと楽にするかもしれません。このファンキーなバイナリ ロジックの代わりに、セットを作成し、MySQL にバイナリ ロジックを実行させることができます。これにより、発生する可能性のあるプログラマ エラーやデバッグの問題の数が制限され、コードが読みやすくなります。

しかし、整数の使用に固執している場合は、Bit Functionsを調べてください。たとえば、パーミッション 16 が設定されているかどうかを確認するには、次のようにします。

SELECT permission<<4 & 1 FROM users

そして、パーミッションを追加したい場合:

UPDATE users SET permission = permission | 16
于 2012-10-17T07:05:37.213 に答える