Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP从数据库中正确获取标志值?_Php_Mysql_Database_Select_Flags - Fatal编程技术网

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

如何使用PHP从数据库中正确获取标志值?,php,mysql,database,select,flags,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 .... SELECT * FROM people W

想象一下。我的数据库中有一个名为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 ....
SELECT * FROM people WHERE flags=16;
例如,此字段的值可以是65536或更多或更少。我的问题是-如何使用PHP代码从该字段获取特定标志?我的意思是这样的:

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 ....
SELECT * FROM people WHERE flags=16;

但结果将返回所有人,不仅是字段中的数字16,还将返回旗帜为65536的人,16的人,而不是2或1的人。在我的php代码或某些特定的php集成函数中,我应该使用哪个SELECT查询?谢谢。

不过逻辑不正确。不能只有一个包含16的标志,因为它不是唯一的

假设您有一个包含这行的DB

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
要使用using select语句从此表中选择标志16,您将获得两行数据,您可以使用Distinct或将标志设置为唯一的

假设标志是位字段,并且您希望选择设置了位4 10000的行

但这并不理想,因为您正在失去DBs所具有的所有参考价值


你应该有两张新桌子;国旗和人民旗帜。前者包含所有的标志id和名称列应该足够了。后者包含flag\u id和people\u id列,创建了一种多对多关系,请参见。

你能澄清你的问题吗?你能更清楚地说明你到底想要什么吗,尤其是最后一部分有点让人困惑……好的,有些标志可以组合在一起,比如4194304、8388608、134221824等。。。可以加在一起,比如2147485696。。。那么,在php中,我应该使用哪个系统来获取在标志字段编号8388608中有标志的人呢?例如,当我进行查询时,比如从标志所在的人中选择*&134221824;它还将返回带有标志36864的结果。。。我有一个包含所有标志的字段,不能更改它-有没有办法在不创建任何其他表的情况下这样做?在这种情况下,您的标志系统被破坏了。标志必须是唯一的、固定宽度的,通常是单位切换,才能正常工作。例如,1+2+128+4096=4227-所以我的标志字段使用数字4227-php中是否有任何select查询或其他东西可以从该字段中选择所有拥有128个标志的人?也就是说,这个人的号码是4227,其中包含了128。是的,从标记为&128的人中选择*,就像我原来的答案一样。请参阅我之前的评论。如果出现误报,这是因为当离散位字段切换时,标志值不可用。