0

想象它是这样的。我的数据库中有一个名为的字段,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 集成功能?谢谢你。

4

2 回答 2

2

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

SELECT * FROM people WHERE flags & 16;

这并不理想,因为您正在失去数据库所擅长的所有参考优势。

你应该有两个新表;flagspeople_flags。前者包含所有标志(id并且name列应该足够了)。后者包含flag_idpeople_id列,创建多对多关系(请参阅联结表)。

于 2012-06-25T01:53:17.967 回答
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 或使标志唯一

于 2012-06-25T01:50:27.767 回答