-2

我究竟做错了什么?如您所见,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';
4

4 回答 4

3

我完全同意其他人的观点,即您最好对数据进行规范化。但是,如果由于某种原因这不是一个选项,请尝试使用FIND_IN_SET()

SELECT *
  FROM umaga
 WHERE babu = 76
   AND FIND_IN_SET('139', anum) > 0

输出:

| 身份证 | 巴布 | 数字 |
--------------------------------
| 3 | 76 | 634,35,11,65,139 |

这是SQLFiddle演示

现在 php 代码可能看起来像

$sql = "SELECT COUNT(*) FROM umaga WHERE babu = 76 AND FIND_IN_SET('139', anum) > 0";
$result = $db->query($sql)->fetch();
echo $result ? 'ID 139 does exist in a row' : 'There is no row that contains that id';
于 2013-07-13T23:22:12.267 回答
0

永远,永远,永远不要在一列中存储多个值。

就像你现在看到的那样,这只会让你头疼。规范化您的表格。然后就可以正常选择了。

它应该看起来像这样

id | babu | anum
--------------------    
1  | 76   | 34
1  | 76   | 21
1  | 76   | 421
2  | 76   | 345
2  | 76   | 948
2  | 76   | 21
2  | 76   | 433
...
于 2013-07-13T23:20:15.033 回答
0

我相信你必须使用fetchlike循环结果

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';
}

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

于 2013-07-13T23:21:32.167 回答
0

除了缺少查询的规范化之外,还从数据库中获取所有行。您必须遍历它们或在 where 子句中使用 ID

于 2013-07-13T23:21:49.897 回答