Php 检查特定id的行是否包含以逗号分隔的特定数字
我做错了什么?如您所见,139在第3行。但它仍然返回falsePhp 检查特定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();
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没有包含
的行置于循环之外(使用一些临时布尔变量),或者在中更改它,这一行不包含
;-)看起来是我的答案!