ユーザーテーブルがあり、ビットマスク基準でいくつかの行を選択したいと考えています。小さな例で私の問題を説明しようとします。
テーブルユーザーの構造
user_id int [primary key, auto_increment]
user_email varchar(200)
user_privileges int
注:フィールドは他にもありますが、この質問には関係ありません。
塗りつぶされたテーブルは次のようになります
+---------+--------------------+-----------------+
| user_id | user_email | user_privileges | << binary
+---------+--------------------+-----------------+
| 1 | john@example.com | 165 | 10100101
| 2 | max@example.com | 13 | 00001101
| 3 | trevor@example.com | 33 | 00100001
| 4 | paul@example.com | 8 | 00001000
| 5 | rashid@example.com | 5 | 00000101
+---------+--------------------+-----------------+
user_privileges
ここで、特定の特権ビットマスク (列ごと)でユーザーを選択したいと考えています。
例えば:
- bitmask=1 [00000001] は、ユーザー ID 1、2、3、および 5を選択します
- bitmask=9 [00001001] は user-id 2のみを選択します
- bitmask=5 [00000101] は、ユーザー ID 1、2、および 5を選択します
- bitmask =130 [10000010] はnoneを選択します
私の質問:クエリから可能ですか、それともすべてのユーザーを 1 人ずつ調べて PHP コードからこの値を確認する必要がありますか? また、フィールドuser_privilegesがtext
整数ではなく 16 進数を含む場合は可能ですか? mysqlクエリの例が必要です。
注:これは、8 ビットの特権セットを使用した単純な例です。実際の環境では、より大きなセット (より大きな整数、より多くのバイト) を持つ場合があります。権限の状態ごとに個別の列を作成することは問題なく機能しますが、それは可能な解決策ではありません。私はむしろ16進値で作業したいのですが、整数も問題ありません。何かが何もないよりはましです。
事前にサンクス。