Php 将MYSQL字段拆分为数组并搜索

Php 将MYSQL字段拆分为数组并搜索,php,mysql,Php,Mysql,我在MySQL表中有一个字段。当我添加车辆时,该字段称为“车辆”,我按ID而不是名称添加车辆,因此该字段的填充方式为“2:3:4:6:7:9”,2为汽车,7为自行车,等等 我想快速简单地做的是,当我查询表时,我想查看字段vehicle包含“2”是否在2:3:4:7:9范围内的该字段中 我试了很多,但都是一无所获 谢谢如果您只想找到任何特定的号码,请这样做 $data = "2:3:4:6:7:9"; echo "found on index : " . array_search("2", exp

我在MySQL表中有一个字段。当我添加车辆时,该字段称为“车辆”,我按ID而不是名称添加车辆,因此该字段的填充方式为“2:3:4:6:7:9”,2为汽车,7为自行车,等等

我想快速简单地做的是,当我查询表时,我想查看字段vehicle包含“2”是否在2:3:4:7:9范围内的该字段中

我试了很多,但都是一无所获


谢谢

如果您只想找到任何特定的号码,请这样做

$data = "2:3:4:6:7:9";
echo "found on index : " . array_search("2", explode(":", $data));

您可以在query查询中使用查找集合中的\u

SELECT *
FROM yourTable
WHERE FIND_IN_SET('2',REPLACE(vehicle ,':',',')) > 0;
样本

mysql> SELECT FIND_IN_SET('1',REPLACE('2:3:4:7:9',':',',')) as a;
+------+
| a    |
+------+
|    0 |
+------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('2',REPLACE('2:3:4:7:9',':',',')) as a;
+------+
| a    |
+------+
|    1 |
+------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('7',REPLACE('2:3:4:7:9',':',',')) as a;
+------+
| a    |
+------+
|    4 |
+------+
1 row in set (0,00 sec)

mysql> SELECT FIND_IN_SET('8',REPLACE('2:3:4:7:9',':',',')) as a;
+------+
| a    |
+------+
|    0 |
+------+
1 row in set (0,00 sec)

您应该规范化您的数据库:添加一个包含车辆的表和一个将其链接到现有表的表。这真的很耗时吗?必须能够拆分“1:3:5:7:8”,并查看“3”是否存在,然后从那里继续?这必须更快更容易,谢谢你为什么这真的是个坏主意。将分隔符更改为逗号将使您的生活更轻松(在_set()中查找_),但您的查询效率仍然很低。由于数据库设计不好而进行查询黑客攻击会耗费大量时间。只需在重复主题中用冒号替换逗号,您就可以得到一个简单的答案。但是好的答案是改变你的设计。你确实意识到你必须从数据库中获取所有的行才能在php中实现这一点吗?不,什么也找不到:$result=mysqli_query($con,“SELECT*”,(3959*acos(弧度(53.8342899999999))*cos(弧度(纬度))*cos(弧度(经度)-弧度(-3.03997970000035))+sin(弧度(53.8342899999999))*sin(弧度(纬度)))作为距离小于30的客户的距离,并在_集合中找到_('1',替换(车辆,':',',')>0;限制为0,20;”;@zak-它工作,我添加了一些示例