Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 使用搜索结果(如%search%)匹配数据库中另一个表中的id_Php_Mysql - Fatal编程技术网

Php 使用搜索结果(如%search%)匹配数据库中另一个表中的id

Php 使用搜索结果(如%search%)匹配数据库中另一个表中的id,php,mysql,Php,Mysql,数据库中有两个表:零件和产品。 我在products表中有一列,ID字符串以逗号分隔。这些ID与零件表的ID匹配 **parts** ID | description (I'm searching this part) ------------------------------- 1 | some text here 2 | some different text here 3 | ect... **products** ID | parts-list ----

数据库中有两个表:零件和产品。 我在products表中有一列,ID字符串以逗号分隔。这些ID与零件表的ID匹配

**parts**

ID  |  description (I'm searching this part)
-------------------------------
1   |  some text here
2   |  some different text here
3   |  ect...

**products**

ID  |  parts-list
--------------------------------
1   |  1,2,3
2   |  2,3
3   |  1,2
在这个问题上,我真的很纠结于SQL查询。 我已经完成了第一部分,从零件表中得到了id

从描述为“{$search}%”的部分中选择*

最大的问题是描述列的逗号分隔结构

显然,我可以在PHP中这样做,从parts表中创建一个结果数组,使用该数组搜索products表中的id,然后使用这些结果再次从parts表中获取行数据。效率不高

我也尝试过这个,但我显然在尝试比较两个数组,不确定应该如何做

SELECT * FROM `products` WHERE 
CONCAT(',', description, ',') 
IN (SELECT `id` FROM `parts` WHERE `description` LIKE '%{$search}%')

有人能帮忙吗?

我可能会尝试定位和SUBSTR的组合。我主要在MSSQL中工作,它有CHARINDEX,我认为它的工作原理类似于MySQL的LOCATE。这肯定是一团糟。零件列表字段中是否有数量可变的元素?

您应该重构数据库,引入一个名为product\u part的表,该表有两列product\u id,part\u id。并且去掉逗号分隔的字段,因为它效率低下。要补充DevZer0所说的内容,您要查找的术语是多对多或联接表。-这绝对是你想要在这里做的。假设这不是一个选项。每个产品都有多个零件,每个零件与多个产品一起使用,每个零件的数量不同。我能保持这种关系的唯一方法就是使用上面的方法。是的,每种方法都有不同的数量。基本上,结构是这样设置的:零件表保存所有信息,产品表仅用于在显示页面时整理数据。我需要的是一个搜索功能,它将在零件表中搜索匹配的结果,在“零件列表”列中引用具有这些零件的产品,并返回每个产品的行数据。也许可以查看一下。