Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 检查特定id的行是否包含以逗号分隔的特定数字_Php_Mysql - Fatal编程技术网

Php 检查特定id的行是否包含以逗号分隔的特定数字

Php 检查特定id的行是否包含以逗号分隔的特定数字,php,mysql,Php,Mysql,我做错了什么?如您所见,139在第3行。但它仍然返回false id | babu | anum -------------------- 1 | 76 | 34,21,421 2 | 76 | 345,948,21,433 3 | 76 | 634,35,11,65,139 4 | 76 | 4366,25,74,9 $a = $db->query("SELECT * FROM umaga WHERE babu = 76")->fetch();

我做错了什么?如您所见,139在第3行。但它仍然返回false

id | babu | anum
--------------------    
1  | 76   | 34,21,421
2  | 76   | 345,948,21,433
3  | 76   | 634,35,11,65,139
4  | 76   | 4366,25,74,9


$a = $db->query("SELECT * FROM umaga WHERE babu = 76")->fetch();
$list_of_ids = explode(',', $a['anum']);

echo in_array(139, $list_of_ids)  ? 'ID 139 does exist in a row' : 'There is no row that contains that id';
决不,决不,决不在一列中存储多个值。 就像你现在看到的,这只会让你头疼。使你的桌子正常化。然后您可以正常选择

应该是这样的

id | babu | anum
--------------------    
1  | 76   | 34
1  | 76   | 21
1  | 76   | 421
2  | 76   | 345
2  | 76   | 948
2  | 76   | 21
2  | 76   | 433
...

我相信您必须使用
fetch
like循环结果

while($a = $db->query("SELECT * FROM umaga WHERE babu = 76")->fetch()){
$list_of_ids = explode(',', $a['anum']);

echo in_array(139, $list_of_ids)  ? 'ID 139 does exist in a row' : 'There is no row that contains that id';
}

作为旁注,或者应该是主注,强烈建议不要存储逗号分隔的数据

除了缺少规范化之外,您的查询正在从数据库中获取所有行。您必须循环使用它们,或者在where子句中使用ID。我完全同意其他人的看法,您最好规范化数据。但如果出于某种原因,这不是一个选项,请尝试使用

选择*
来自umaga
其中babu=76
并在_集合中找到_('139',anum)>0
输出:

| ID | BABU | ANUM | -------------------------------- | 3 | 76 | 634,35,11,65,139 |
NORMALIZE,NORMALIZE,NORMALIZE:你做错的是在表列中存储逗号分隔的数据。如果你真的需要这样做(这是一个糟糕的做法),那么看看select语句中MySQL的函数为什么这是真的,它没有回答问题。关于规范化的这一点可以作为一个很好的旁注,但这还不足以作为一个答案。但我不想支持这样做。我的答案回答了这个问题:改变数据库结构,这个问题就会消失。这就是问题的根源所在。从技术上讲,它确实回答了问题,即
我做错了什么?
您根本不需要获取所有行!我没说他应该。但这正是他的剧本目前正在做的。只是它不起作用:那为什么不呢?这根本没有说明什么是错误的(忽略一个非规范化的模型)。这种方法效率极低。另外,它与原始代码有何不同?它会在整个结果集中循环,而不仅仅是最后一个条目,来吧?让它更明显,并花时间格式化代码,使意图更具可读性。否则,我同意这回答了为什么in-PHP版本不起作用的问题。是的,但是您应该将echo
没有包含
的行置于循环之外(使用一些临时布尔变量),或者在
中更改它,这一行不包含
;-)看起来是我的答案!