我有一张users
表格,格式如下:
users(id,name.....,settings)
settings
字段是类型number
并包含设置的位掩码。
我必须支持(除其他外)查询,例如:
- 查找所有具有 setting1、setting23、setting125 的用户
今天这样的查询看起来像:
select * from users where bit_and(settings,2^1+2^23+2^125) = 2^1+2^23+2^125
当然它不是一个完美的实现,但它已经以这种方式工作了很多时间。
问题是今天我们有 126 种不同的设置,这正是oracle 11g
按位运算的限制。这意味着我们不能再添加新设置。
我正在尝试找到解决此问题的替代方法。显而易见的方法是创建映射表(用户->设置)而不是设置字段,例如:
user_id | setting
128 | 1
128 | 23
128 | 125
但是上面的查询将是这样的:
select *
from users u1 join settings s1 on u1.id = s1.user_id and s1.setting = 1
join settings s2 on u1.id = s2.user_id and s2.setting = 23
join settings s3 on u1.id = s3.user_id and s3.setting = 125
看起来不太好...
因此,如果有人可以就这个问题提出任何解决方案/方法,那将非常有帮助......