想象一下这样。我的数据库中有一个名为flags
的字段,其中添加或删除了这样的数据:
UPDATE people SET flags=flags|16 WHERE ....
UPDATE people SET flags=flags|128 WHERE ....
UPDATE people SET flags=flags&~16 WHERE ....
UPDATE people SET flags=flags&~128 WHERE ....
例如,此字段的值可以为65536或更高或更低。我的问题是 - 如何使用PHP代码从该字段获取特定标志?我的意思是这样的:
SELECT * FROM people WHERE flags=16;
但结果将返回所有不仅仅是16号字段的人,但会返回标志为65536的人,16人但没有2或1的人。我应该在这里使用哪个SELECT
查询php代码或者某些特定的PHP集成函数?谢谢。
答案 0 :(得分:2)
假设flags
是位域,并且您想要选择位#4(10000
)设置的行
SELECT * FROM people WHERE flags & 16;
这并不理想,因为你失去了数据库有益的所有参考优点。
你应该拥有的是两张新桌子; flags
和people_flags
。前者包含所有标志(id
和name
列应该足够)。后者包含flag_id
和people_id
列,创建多对多关系(请参阅junction table)。
答案 1 :(得分:0)
但逻辑不正确。你不能只有一个包含16的标志,因为它不是唯一的。
假设您有此行的数据库
name:Jhon tel:012345 email:test@test.com flags:16
name:Mike tel:012344 email:mike@test.com flags:16
name:Sarah tel:012346 email:sarah@test.com flags:2442
使用Select语句从该表中选择标志16,您将获得两行数据,您可以使用Distinct或获取标志是唯一的