如何使用PHP从数据库中正确获取标志值?

时间:2012-06-25 01:41:08

标签: php mysql database select flags

想象一下这样。我的数据库中有一个名为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集成函数?谢谢。

2 个答案:

答案 0 :(得分:2)

假设flags是位域,并且您想要选择位#4(10000)设置的行

SELECT * FROM people WHERE flags & 16;

这并不理想,因为你失去了数据库有益的所有参考优点。

你应该拥有的是两张新桌子; flagspeople_flags。前者包含所有标志(idname列应该足够)。后者包含flag_idpeople_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或获取标志是唯一的